0

ここのstackoverflowで、この役立つコードスニペットを見つけました:

Array.prototype.clean = function(deleteValue) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] == deleteValue) {         
            this.splice(i, 1);
            i--;
        }
    }
    return this;
};

現在Firefoxに移植しているChrome拡張機能の配列から空の値を削除するために使用します。私は次のように ist を使用します:

foobar = foo.concat(bar).clean('').toString();

クロムでは問題なく動作しますが、Firefox では TypeError が発生します。

TypeError: foo.concat(...).clean is not a function

問題の可能性がある提案はありますか?

//編集//

foo と bar は配列です。foo は、次のように解析される json から取得されます。

var json = {property: 'a,b,c,d,e,f,g'};
json = json.property.split(',');

そして、次のように解析されるテキストエリアからのバー:

function digestTextField (string) {
    // takes string of format "a, b , c", trims spaces, converts to lower case
    var rawText = document.getElementById(string + 'Events').value,
        digestedText = rawText.split(','),
        i;

    for (i = 0; i < digestedText.length; i += 1) {
        digestedText[i] = digestedText[i].toLowerCase()
                            .replace(/^\s\s*/, '').replace(/\s\s*$/, '');
    }
    return digestedText;
}

.clean('') が呼び出される前に、両方が simpleStorage に保存され、そこから読み取られます。

4

1 に答える 1

0

掲載されているコードに問題はありませんが、prototype を呼び出した後に clean を追加してみてはいかがでしょうか。以下は、xul アプリケーションで機能します。

function jsdump(str) {
  Components.classes['@mozilla.org/consoleservice;1']
            .getService(Components.interfaces.nsIConsoleService)
            .logStringMessage(str);
}
Array.prototype.clean = function(deleteValue) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] == deleteValue) {         
            this.splice(i, 1);
            i--;
        }
    }
    return this;
};
var foo = {property: 'a,b'};
foo = foo.property.split(',');
var bar="5,6,,7,".split(",");

jsdump("Array has clean:"+Array.prototype.hasOwnProperty("clean"));
jsdump("is foo an array:"+(foo instanceof Array));
jsdump("is bar an array:"+(bar instanceof Array));
jsdump(foo.concat(bar).clean('').toString());

defaults\preferences\prefs.js:

pref("browser.dom.window.dump.enabled", true);
pref("javascript.options.showInConsole", true);
pref("javascript.options.strict", true);
pref("nglayout.debug.disable_xul_cache", true);
pref("nglayout.debug.disable_xul_fastload", true);

アプリケーションを次のように起動します。

firefox --app application.ini -jsconsole
于 2013-07-12T00:16:12.000 に答える