我首先要说我不认为这是可能的,但希望有人知道JavaScript中有一些特殊方法可以做到这一点。我有一个JavaScript对象定义如下:
var t = {
"fields": {
"a": ["99", "98"]
}
};
我正在寻找一种方法,以便我可以使用不同的值定义数组的相同元素两次,这些值可以在两个不同的上下文中使用 - 如下所示:
var t = {
"fields": {
"a": ["99", "98"],
"a": "99|98"
}
};
如果我使用语法t.fields["a"]
查询它,它将返回“99 | 98”,但如果我使用t.fields["a"][0]
查询它,那么它将返回“99”。我理解如果我在没有指定索引的情况下查询数组,那么它会返回“99,98”作为字符串 - 但我需要它返回用“|”分隔的条目而不是“,”。
答案 0 :(得分:3)
也可以使用getter函数,如下所示:
var t = {
"fields": {
"_a": ["99", "98"],
"a": function (index) {
if (typeof index != 'undefined')
return this._a[index];
else
return this._a.join('|');
}
}
};
console.log(t.fields['a']()); // 99|98
console.log(t.fields['a'](1));// 98
您还可以为所有字段设置全局get函数:
var t = {
"fields": {
"_a": ["99", "98"],
get: function (field, index) {
if (typeof index != 'undefined')
return this['_' + field][index];
else
return this['_' + field].join('|');
}
}
};
console.log(t.fields.get('a')); // 99|98
console.log(t.fields.get('a', 1)); // 98
答案 1 :(得分:2)
为了实现你想要的,你有一些选择。根据您的编码风格,环境等,选择最适合您的选项。您好。
您可以轻松替换.toString()
的{{1}}方法,以返回由垂直线(Array.prototype
)分隔的值,而不是通常的逗号。你可以这样做:
|
现在你可以轻松地做你想做的事了:
Array.prototype.toString = function() {
return this.join("|");
};
顺便说一句,更改默认对象'方法/属性并不总是最佳选择,因为某些库或本机方法可能会使用它们并导致错误,因为它们已被修改。
要实现您想要的效果,如果您只需要使用几个数组,则可以修改其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
而非默认prototype
,如下所示:
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("|");
};
(就像我的第一个示例)。< / p>
构建自己的功能并使用它。这是推荐,因为它不会更改任何现有的Array.prototype
方法,这可能会导致一些错误,具体取决于您使用数组的方式。
prototype
答案 2 :(得分:0)
请关闭此功能,感谢@ marco-bonelli和其他所有我已满足以下内容的人:
var t = {
"fields": {
"a": ["99", "98"],
"b": ["77", "76"]
},
"token": "|"
};
Object.keys(t).forEach(function(key) {
t.fields[key].toString = function() {
return this.join(t.token);
};
});
“t”对象是从用户数据动态生成的(小心转义),因此“fields”对象中可能有多个元素。