我有以下物体说,
{"id":"kl45wkfj1k4j34", "firstname":"Arun", "lastname":"K"}
我有要过滤的密钥,使用逗号分隔符在字符串中分配' firstname,lastname' 。
如何过滤该对象以获取输出,如下所示:
{"firstname":"Arun", "lastname":"K"}
答案 0 :(得分:4)
下划线的pick
方法是您正在寻找的方法。
var obj = { "id": 'kl45wkfj1k4j34', "firstname": "Arun", "lastname": "K" };
var filter = 'firstname, lastname',
var result = _.pick(obj, filter.split(', '));
答案 1 :(得分:2)
有很多方法可以解决这个问题。到目前为止,答案假设您要修改现有对象,但问题未指定; “过滤器”这个词暗示可能不是。因此,如果要创建新的过滤对象,而不是改变现有过滤对象,则可以使用reduce函数。你说你的密钥列表是一个字符串,但为了保持示例清洁,让我们假设你只是做str.split(',')
或类似的,所以在将它传递给这些函数之前它已经是一个数组。
function createObjectFilter(keys) {
return function(obj) {
return keys.reduce(function(acc, key) {
acc[key] = obj[key];
return acc;
}, {});
};
}
var myFilter = createObjectFilter([ 'a', 'b' ]);
var filteredObject = myFilter(object);
const createObjectFilter = keys => obj => keys.reduce((acc, key) => {
acc[key] = obj[key];
return acc;
}, {});
const myFilter = createObjectFilter([ 'a', 'b' ]);
const filteredObject = myFilter(object);
现在,createObjectFilter函数根据给定的键列表返回实际的过滤器函数。您可以将其设置为“一体化”,但这种方法的优点是可以在更多情况下重复使用过滤器。例如:
const filteredObjects = unfilteredObjects.map(myFilter);
答案 2 :(得分:1)
如果你有这个对象:
var obj = {"id":"kl45wkfj1k4j34", "firstname":"Arun", "lastname":"K"};
然后你可以这样做:
delete obj.id;
console.log(obj);
现在评论:
var newlist = listarray.map(function (obj){
delete obj.id;
return obj;
});
这将创建一个没有id
的新列表数组。
或使用特定键:
var newlist = listarray.map(function (obj){
var o = {};
o.firstname = obj.firstname;
o.lastname = obj.lastname;
return o;
});
答案 3 :(得分:1)
您可以使用过滤字符串,将其拆分为新对象的键。
var obj = { "id": 'kl45wkfj1k4j34', "firstname": "Arun", "lastname": "K" },
filter = 'firstname, lastname'.split(', '),
result = {};
filter.forEach(function (k) {
result[k] = obj[k];
});
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
答案 4 :(得分:1)
var toBeFilteredObject = {...}; // {"id":"kl45wkfj1k4j34", "firstname":"Arun", "lastname":"K"}
var filteredObject = {};
'comma, seperated, string'.split(',').forEach(function(key) {
key = key.trim();
filteredObject[key] = toBeFilteredObject[key];
});
答案 5 :(得分:0)
如果您有对象数组,请使用此
data = [{
"id": "kl45wkfj1k4j34",
"firstname": "Arun1",
"lastname": "K1"
}, {
"id": "kl45wkfj1k4j14",
"firstname": "Arun2",
"lastname": "K2"
}, {
"id": "2",
"firstname": "Arun3",
"lastname": "K3"
}];
data = data.map(function(o) {
delete o.id;
return o
})
document.write('<pre>' + JSON.stringify(data, 0, 4) + '</pre>');
答案 6 :(得分:0)
使用_.reduce
var data = {"id":"kl45wkfj1k4j34", "firstname":"Arun", "lastname":"K"}
var filters = 'firstname, lastname'.split(', ');
_.reduce(data,function(result,value,key){
if(filters.indexOf(key)!=-1){
result[key] =value
}
return result;
},{})