2017-08-15 75 views
2

我正在寻找通过键提取字典值,并且我试图使用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值的列表?

+0

不要忘记接受答案。你甚至可以通过你的历史回顾https://stackoverflow.com/users/6860252/mr-jibz?tab=questions,并且回答接受答案,因为你在大多数问题上都有大部分不被接受的答案。 – m0meni

回答

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约定。

+0

当我尝试按照你所显示的方式使用'Array.concat'时,它会在三行中打印一个不断增加的值列表,例如'['Chris']'然后是'['Chris',150]'然后'['克里斯',150,'纽约']'....为什么? –

+0

@Jibz先生,那到底发生了什么事?您在for循环的每次迭代中添加一个新值。如果您只想打印最终结果,请在for循环之外移动'console.log'。我错过了什么吗? – m0meni

+0

你是完全正确的,新手问题,谢谢澄清! –

2

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

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

相关问题