将dict的所有值放在一个数组中

时间:2017-08-15 17:59:20

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

我希望按键提取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中的值列表?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

你犯的错误是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惯例。