JavaScript对象数组

JavaScript对象数组,javascript,Javascript,我正在尝试获取一个数组,例如:[{word:1},{word2:1},{word3,5}] for (var item in text) { var word = text[item]; var key = {}; key[word] = 1; array.push(key); } for (var wrd in array ) { console.log('Word ' + Object.keys(array[wrd])); console.log('Number '

我正在尝试获取一个数组,例如:
[{word:1},{word2:1},{word3,5}]

for (var item in text) {
  var word = text[item];
  var key = {};
  key[word] = 1;
  array.push(key);
}

for (var wrd in array ) {
  console.log('Word ' + Object.keys(array[wrd]));
  console.log('Number ' + array[wrd]);
}
按键打印正常,但数字仍打印为
[object object]

有更好的方法吗


类似的答案似乎不起作用。

因为您对项目本身而不是位置感兴趣,所以您应该使用而不是
for..in
。你可能想要这样的东西:

array.forEach(function(item) {
    console.log('Word ' + Object.keys(item));
    console.log('Number ' + item[Object.keys(item)]);
});
请注意,这仅在每个项只有一个键的情况下有效。否则,您还需要迭代每个项的键

另外,您的代码打印
“[对象对象]”
的原因是
数组[wrd]
是数组的一项(例如,
{word:1}
),当您将其附加到字符串(
'Number'+array[wrd]
)时,它将对象本身表示为字符串
'[object object]

p.p.S.(根据对原始问题的编辑):

如果您试图将
数组
构造成
[{word:1},{word2:1},{word3,5}]
,那么这取决于您从什么开始。我假设
text
是一个单词数组,您试图构建一个单词/单词计数对数组。如果是这种情况,那么我建议您构造一个对象,将单词作为键映射到计数,如下所示:

var text = ['word', 'word2', 'word3', ...];
var frequencyMap = {};
text.forEach(function(word) {
    var count = frequencyMap[word] || 0; // retrieve last count (if any)
    frequencyMap[word] = count + 1;
});
如果确实需要word/count对象数组,可以使用以下方法将贴图转换为一个:

var array = [];
Object.keys(frequencyMap).forEach(function(word) {
    array.push({word : frequencyMap[word]});
})

请注意,中的“
for..in”用于循环对象,而不是数组。@elclars您的意思是不是用于循环数组而不是对象?每当您将对象附加到字符串时,它都会将该对象转换为字符串,您将其视为
[object object]
。只需执行
console.log(array[wrd])
即可看到所需的对象。此外,正如@elclanrs所提到的,您应该只使用
for..in
循环来遍历对象的键。对于数组,请使用或其中一个内置数组函数,例如。您可以使用For…in For数组。它只是在数组的键之间循环。然后可以使用该键获取数组项<代码>用于(数组中的var键){console.log(数组[key]);}
。也许最好从一个迭代整数开始循环,但这是可以做到的。这并不能解决OPs问题。他们想知道为什么
数组[wrd]
被打印为
“[object object]”
。正如我已经说过的,它是通过将一个对象与一个字符串连接而来的。此外,在大多数情况下,将一组键作为键传递给对象只会产生
未定义的
。@MikeC-OP没有询问它为什么打印为
“[object object]”
。问题是“有更好的方法吗?”OP:“按键打印正常,但数字仍然打印为[object]/”。这就是问题所在。这就是为什么他们要求一个更好的方法。@MikeC-我提供了一个更好的方法,直接解决了OP的问题。不,你没有。它仍然被错误地打印(在第一行),即使他们要求一个更好的方法来解决这个问题,这似乎是基于观点的。我可以想出一个方法,提供同样的结果,但在我看来,比你的更好。