在下面的示例中,有一种方法可以将一个或多个对象键(例如"value"
)设置为变量吗?我想在保持JOSN对象完整的同时这样做。
var ex = {
"value": 4,
"amount": 1341,
"data": "tree",
"animal": "mouse"
}
我知道可以这样做。
var value = "value";
var ex = {};
ex[value] = 4;
ex.amount = 1341;
ex.data = "tree";
ex.animal = "mouse";
这会将整个对象撕成碎片,而且难以管理。
答案 0 :(得分:3)
不,那是不可能的。你需要以第二种方式,或两者的混合:
var ex = {
"amount": 1341,
"data": "tree",
"animal": "mouse"
};
ex[value] = 4;
答案 1 :(得分:1)
您可以扩展Object.prototype
:
Object.prototype.append = Object.prototype.append || function (key,val){
this[key] = val; return this;
};
能够做类似
的事情var value = 'value'
,animal = 'animal'
,ex = {
"amount": 1341,
"data": "tree",
}.append(value,4)
.append(animal,'mouse');
append
方法可能更全面:
Object.prototype.append = Object.prototype.append || function(){
var args = [].slice.call(arguments);
if (args.length===1 && /object/i.test(args[0].constructor)){
for (var l in args[0]){
if (args[0].hasOwnProperty(l))
this[l] = args[0][l];
}
}
if (args.length===2){ this[args[0]] = args[1]; }
if (args.length>2 && args.length%2<1){
for (var i=0;i<args.length;i+=2){
this[args[i]] = args[i+1];
}
}
return this;
};
现在你可以:
var value = 'value'
,animal = 'animal'
,amount = 'amount'
,data = 'data'
,ex = {}.append(amount,1341,data,'tree',value,4,animal,'mouse');
另请参阅this page(关于扩展本机JS对象)
答案 2 :(得分:0)
这很简单......
var ex = {
"value": 4,
"amount": 1341,
"data": "tree",
"animal": "mouse"
}
var valList = [['4','1341','tree','mouse'],['5','1341','tree','mouse']];
var objList=[];
for (var i =0; i<valList.length; i++)
{
j=0;
for(var o in ex)
{
ex[o] = valList[i][j];
j++;
}
objList[i]= ex;
}
它可以制作一堆对象
答案 3 :(得分:0)
如果您只是尝试保存一些语法输入或者使用变量中的属性名称对初始对象有一点自由,那么您可以创建一个函数来获取可变数量的参数并解释每个连续的参数对作为关键和价值:
function setProps(obj, key, value /* key2, value2, etc... */) {
for (var i = 1; i < arguments.length; i+=2){
obj[arguments[i]] = arguments[i+1];
}
}
var ex = {};
setProps(ex, "value", 4, "amount", 1341, "data", "tree", "animal", "mouse");
传递的任何键值都可以是字符串或变量中的值。
无法定义使用变量中的属性名称的静态声明的javascript数据结构。你必须执行代码才能做到这一点。