Javascript密钥未在Object中填充

时间:2016-09-12 18:01:24

标签: javascript

我正在尝试使用键/值创建一个对象但是当我看到该对象时,键没有正确填充..

我希望键是 - 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}]"

3 个答案:

答案 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}, ...]