将字典中的所有值放入一个数组中

3

我想通过键提取字典的值,尝试使用concat()函数将这些值添加到空数组中,但它打印出了值,但是每个值都被放在自己的数组中(至少看起来是这样的,因为每个值都被唯一的括号包围)。

var dict = {Name: 'Chris', Height: 150, Location: 'New York'};
var dictVal = new Array(); 

for (var key in dict) {
  var val = dict[key];
  console.log(dictVal.concat(val));
}

如何将这些值合并到它们自己的一对方括号中,以表示在dictVal中的值列表?


不要忘记接受答案。你甚至可以回顾你的历史记录 https://stackoverflow.com/users/6860252/mr-jibz?tab=questions 并且追溯地接受答案,因为你大部分问题都没有被接受的答案。 - m0meni
2个回答

5
您所犯的错误是误认为Array.concat返回一个新数组。
dictVal = dictVal.concat(val);

想要得到您想要的结果,您需要做的就是。

或者,您还可以进行

for (var key in dict) {
  var val = dict[key];
  dictVal.push(val);
  console.log(dictVal);
}

如果您不想生成新的数组。


此外,有更好的方法来实现您想要的功能,例如将对象的键映射到值:

var dict = {Name: 'Chris', Height: 150, Location: 'New York'};
var dictVal = Object.keys(dict).map(key => dict[key]);

通过使用Object.keys进行迭代通常比使用for...in更可取,因为:

Object.keys()方法返回一个给定对象的自身可枚举属性数组,与由for...in循环提供的顺序相同(区别在于for-in循环还会枚举原型链中的属性)

Array.map只需要几行代码就能完成。


另外,顺带一提,通常不使用new Array()。你应该这样做:

var dictVal = []

为了更好地符合常见的JS约定。


当我尝试按照你展示的方式使用Array.concat时,它会在三行中打印一个不断增长的值列表,即[ 'Chris' ]然后是[ 'Chris', 150 ],最后是[ 'Chris', 150, 'New York' ]。为什么会这样呢? - Mr. Jibz
@Mr.Jibz 嗯,这正是正在发生的事情,不是吗?您正在每次 for 循环迭代时添加一个新值。如果您只想打印最终结果,请将 console.log 移到 for 循环之外。我有什么遗漏吗? - m0meni
你说得完全正确,这是新手问题,感谢您的澄清! - Mr. Jibz
堆栈答案之山羊 - m_callens

3
在现代浏览器中,您可以按照以下步骤操作:

var dict       = {Name: 'Chris', Height: 150, Location: 'New York'},
    dictValues = Object.values(dict);
console.log(dictValues);


这是Object.values()的文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/values - schmiddy98

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接