2016-11-09 37 views
1

我有一个对象:选择从对象给出的属性值代入阵列

person = { 
    birth_year: 1970, 
    first_name: "John", 
    last_name: "Doe", 
    occupation: "Doctor", 
    city: "Boston", 
    married: true 
} 

我有钥匙的名字在给定的顺序数组:

keys = ["occupation", "last_name", "city"] 

我想这个数组:

["Doctor", "Doe", "Boston"] 

重要的是,答案应该保证顺序(JavaScript不保证对象迭代的顺序)。

我认为在lodash /下划线中可能有一些实用功能可以简单地实现,但无法找出任何问题。

回答

4

您可以使用Array.prototype.map。通过数组映射循环,并通过对每个项目应用函数来创建一个新数组。当您使用keys数组作为起点,并返回该键的o的值时,您将获得一个仅包含值的新数组。

使用“动态”键名称时,可以使用object[stringKeyName]表示法检索值。

var o = { 
 
    birth_year: 1970, 
 
    first_name: "John", 
 
    last_name: "Doe", 
 
    occupation: "Doctor", 
 
    city: "Boston", 
 
    married: true 
 
}; 
 

 
var keys = ["occupation", "last_name", "city"]; 
 

 
var result = keys.map(function(k) { return o[k]; }); 
 

 
console.log(result);

如果它适合你的风格,你可以创建一个辅助方法来代替匿名函数:

var o = { birth_year: 1970, first_name: "John", last_name: "Doe", occupation: "Doctor", city: "Boston", married: true }; 
 
var keys = ["occupation", "last_name", "city"]; 
 

 
var prop = obj => key => obj[key]; 
 
var result = keys.map(prop(o)); 
 

 
console.log(result);

+0

我们甚至可以简化成'变种结果此= keys.map(K => 0 [K])',但我还是不喜欢它。 –

+0

如果是风格问题,你可以将一些东西包装在帮手中。看看第二个片段。 – user3297291

+0

如果顺序很重要,这个或'_.map'函数是要走的路。 –

3

随着Lodash你可以使用pickvalues

var o = { 
 
    birth_year: 1970, 
 
    first_name: "John", 
 
    last_name: "Doe", 
 
    occupation: "Doctor", 
 
    city: "Boston", 
 
    married: true 
 
} 
 
var keys = ["occupation", "last_name", "city"]; 
 

 
var result = _.values(_.pick(o, keys)); 
 
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>

+0

不错的一个...... – Mahi

+0

它保证顺序吗? –

+0

@Mikhail Batcer我不确定。 –