按 属性 个名称数组过滤对象
Filter object by array of property names
我有一个这样的对象
var obj = { name1: somevalue1, name2: somevalue2, name3: somevalue3}
和一个数组
var arr = [name2, name3]
两者都是动态创建的。
我需要按数组过滤对象(完全按 属性 名称,而不是按其值)。
但到目前为止,我发现的所有方法都是关于按值过滤的。
所以结果应该是
var result = {name2: somevalue2, name3: somevalue3}
我正在使用 angular,下划线。我需要过滤它不是在模板中,而是在控制器中。
感谢您的帮助!
您可以迭代键并使用键值对构建一个新对象。
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);
您可以使用 reduce()
到 return 对象。
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)
迭代数组的每个元素并检查元素是否在对象中可用作为键名然后将其放入结果中。
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);
您可以使用 _.pick 来 "filter" 对象。
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>
我有一个这样的对象
var obj = { name1: somevalue1, name2: somevalue2, name3: somevalue3}
和一个数组
var arr = [name2, name3]
两者都是动态创建的。 我需要按数组过滤对象(完全按 属性 名称,而不是按其值)。 但到目前为止,我发现的所有方法都是关于按值过滤的。 所以结果应该是
var result = {name2: somevalue2, name3: somevalue3}
我正在使用 angular,下划线。我需要过滤它不是在模板中,而是在控制器中。 感谢您的帮助!
您可以迭代键并使用键值对构建一个新对象。
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);
您可以使用 reduce()
到 return 对象。
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)
迭代数组的每个元素并检查元素是否在对象中可用作为键名然后将其放入结果中。
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);
您可以使用 _.pick 来 "filter" 对象。
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>