按属性名称数组过滤对象

时间:2016-11-21 11:49:29

标签: javascript angularjs underscore.js

我有一个像这样的对象

var obj = { name1: somevalue1, name2: somevalue2, name3: somevalue3}

和一个数组

var arr = [name2, name3]

两者都是动态创建的。 我需要按数组过滤对象(完全按属性名称而不是按其值过滤)。 但到目前为止,我发现的所有方法都是按值过滤。 所以结果应该是

var result = {name2: somevalue2, name3: somevalue3}

我使用角度,下划线。我需要不在模板中过滤它,而是在控制器中过滤它。 我感谢任何帮助!

4 个答案:

答案 0 :(得分:2)

您可以使用_.pick“过滤”对象。

var obj = { name1: "somevalue1", name2: "somevalue2", name3: "somevalue3"};
var keys = ["name1", "name2"];

console.log(_.pick(obj, keys));
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

答案 1 :(得分:1)

您可以迭代键并使用键值对构建新对象。

&#13;
&#13;
var obj = { name1: 'somevalue1', name2: 'somevalue2', name3: 'somevalue3' };
    arr = ['name2', 'name3'],
    result = Object.create(null);

arr.forEach(function (k) {
    result[k] = obj[k];
});

console.log(result);
&#13;
&#13;
&#13;

答案 2 :(得分:1)

您可以使用reduce()返回对象。

var obj = {
  name1: 'somevalue1',
  name2: 'somevalue2',
  name3: 'somevalue3'
}
var arr = ['name2', 'name3']

var result = Object.keys(obj).reduce(function(r, e) {
  if (arr.indexOf(e) != -1) r[e] = obj[e];
  return r;
}, {})

console.log(result)

答案 3 :(得分:0)

迭代数组的每个元素,并检查对象中的元素是否可用作键名,然后将其放入结果中。

var obj = { name1: somevalue1, name2: somevalue2, name3: somevalue3};// This is ur object

var arr = [name2, name3];// and this is the array for each element you have to get values from obj

var filterResult = {};// An object to stored the filtered values

arr.forEach(function(elem){ // Iterate for each element of array
    if (obj[elem]) // check in your data object if any key is available of the name of array element 
        filterResult[elem] = obj[elem]; // then put it in filtered object
});

console.log(filterResult);
相关问题