我将首先说我不认为这是可能的,但希望有人知道JavaScript中的一些特殊方法来做到这一点.我有一个JavaScript对象定义如下:
var t = {
"fields": {
"a": ["99", "98"]
}
};
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法,以便我可以使用不同的值定义数组的相同元素两次,可以在两个不同的上下文中使用 - 类似这样:
var t = {
"fields": {
"a": ["99", "98"],
"a": "99|98"
}
};
Run Code Online (Sandbox Code Playgroud)
如果我使用语法查询它将t.fields["a"]
返回"99 | 98",但如果我使用t.fields["a"][0]
它来查询它,那么它将返回"99".我理解如果我在没有指定索引的情况下查询数组,那么它会返回"99,98"作为字符串 - 但我需要它返回用"|"分隔的条目 代替 ",".
为了实现您想要的目标,您有一些选择。根据您的编码风格、环境等,选择最适合您的选项。就在这里。
您可以轻松地将.toString()
的 方法替换Array.prototype
为返回由竖线 ( |
) 而不是通常的逗号分隔的值。你可以这样做:
Array.prototype.toString = function() {
return this.join("|");
};
Run Code Online (Sandbox Code Playgroud)
现在您可以轻松地做您想做的事:
var t = {
"fields": {
"a": ["99", "98"]
}
};
console.log("My array is: " + t.fields);
// My array is: 99|98
console.log("Its first element is: " + t.fields[0]);
// Its first element is: 99
Run Code Online (Sandbox Code Playgroud)
顺便说一句,更改默认对象的方法/属性并不总是最佳选择,因为某些库或本机方法可能会使用它们并导致错误,因为它们已被修改。
为了实现你想要的,如果你只需要处理几个数组,你可以修改它们的prototype
s 而不是 default Array.prototype
,如下所示:
// Let's assume you have arrays a, b and c
var a = [1, 2],
b = [3, 4],
c = [5, 6];
a.toString =
b.toString =
c.toString = function() {
return this.join("|");
};
Run Code Online (Sandbox Code Playgroud)
如果您只使用很少的数组,这是一个更好的方法,否则更改您使用的每个数组的每个原型会很繁重,并且最好使用它Array.prototype
(就像我的第一个示例)。
构建您自己的函数并使用它。建议这样做,因为它不会更改任何现有prototype
方法,这可能会导致一些错误,具体取决于您使用数组的方式。
// Create your own function
function myJoin(array) {
return array.join("|");
}
var a = [1, 2, 3];
myJoin(a); // "1|2|3"
// Or add it to the prototype
Array.prototype.myJoin = function() {
return this.join("|");
}
var b = [11, 22, 33];
b.myJoin(); // "11|22|33"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
104 次 |
最近记录: |