【问题标题】:Put all values of dict in an array将dict的所有值放在一个数组中
【发布时间】:2017-08-16 03:59:09
【问题描述】:

我正在寻找按键提取 dict 值,并且我尝试使用 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 中的值列表?

【问题讨论】:

标签: javascript arrays for-loop key-value concat


【解决方案1】:

你犯的错误是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 好吧,这正是正在发生的事情,不是吗?您在 for 循环的每次迭代中添加一个新值。如果您只想打印最终结果,请将 console.log 移到 for 循环之外。我错过了什么吗?
  • 你说的对,新手问题,谢谢澄清!
  • 堆答案的山羊
【解决方案2】:

您可以在现代浏览器中执行以下操作;

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-17
  • 2012-07-01
相关资源
最近更新 更多