我正在尝试使用键/值创建一个对象但是当我看到该对象时,键没有正确填充..
我希望键是 - 0,1,2,3,但它显示“index”作为键。
> categories = ["09/07/2016 00:00","09/07/2016 00:01","09/07/2016 00:02","09/07/2016 00:03","09/07/2016 00:04"]
["09/07/2016 00:00", "09/07/2016 00:01", "09/07/2016 00:02", "09/07/2016 00:03", "09/07/2016 00:04"]
> rate_1 = [0.41,0.54,0.6,0.7,0.8]
[0.41, 0.54, 0.6, 0.7, 0.8]
> dict = []
[]
> categories.forEach(function(ix,index){console.log(index)
dict.push({index:rate_1[index]})
})
0
1
2
3
4
> JSON.stringify(dict)
"[{"index":0.41},{"index":0.54},{"index":0.6},{"index":0.7},{"index":0.8}]"
答案 0 :(得分:3)
您可以通过将index
括在方括号(ES6语法)中来解决此问题:
dict.push({ [index]: rate_1[index]})
如果没有这个,index
确实被视为文字,而不是变量。
var categories = ["09/07/2016 00:00","09/07/2016 00:01","09/07/2016 00:02","09/07/2016 00:03","09/07/2016 00:04"];
var rate_1 = [0.41,0.54,0.6,0.7,0.8];
var dict = [];
categories.forEach(function(ix,index){
dict.push({[index]:rate_1[index]})
});
result = JSON.stringify(dict);
console.log(result);
作为旁注:此代码适合使用map
而不是forEach
,从而为您保存显式数组初始化和push
。我只是提供这个信息;它与你的问题无关; - )
var categories = ["09/07/2016 00:00","09/07/2016 00:01","09/07/2016 00:02","09/07/2016 00:03","09/07/2016 00:04"];
var rate_1 = [0.41,0.54,0.6,0.7,0.8];
var dict = categories.map(function(ix,index){
return {[index]:rate_1[index]};
});
result = JSON.stringify(dict);
console.log(result);
答案 1 :(得分:1)
键被解释为键入它们 - 它们不进行变量检查。如果需要动态密钥 - 首先创建对象,然后添加密钥/ val:
var obj = {};
obj[index] = rate_1[index];
dict.push(obj)
除非您可以使用ES6语法 - 然后使用@ trincot的答案。
答案 2 :(得分:0)
现有解决方案是正确的,但使用Array.prototype.map
使用vanilla Javascript时,这是一个稍微更清洁,功能更强的替代方案。
var dict = rate_1.map(function(rate, idx) {
var entry = {};
entry[idx] = rate;
return entry;
});
// dict is [{0: 0.41}, {1: 0.54}, ...]