如何在Javascript
我有以下对象说,选择一个对象的属性,如何在Javascript
{"id":"kl45wkfj1k4j34", "firstname":"Arun", "lastname":"K"}
,我必须要过滤的关键,“名字,姓氏”使用逗号分隔字符串分配。
如何筛选对象得到的输出如下:
{"firstname":"Arun", "lastname":"K"}
下划线的pick
方法是你在找什么。
var obj = { "id": 'kl45wkfj1k4j34', "firstname": "Arun", "lastname": "K" };
var filter = 'firstname, lastname',
var result = _.pick(obj, filter.split(', '));
谢谢..工作就像一阵微风:-) –
如果你有这样的对象:
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;
});
我得到了这个,但事情就像我有过滤键的列表,用逗号分隔的字符串。任何通用的解决方案建议? –
你可以使用你的过滤字符串,分裂为新对象的键。
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>');
如果你有对象的数组,然后使用这个
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>');
使用_.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;
},{})
var toBeFilteredObject = {...}; // {"id":"kl45wkfj1k4j34", "firstname":"Arun", "lastname":"K"}
var filteredObject = {};
'comma, seperated, string'.split(',').forEach(function(key) {
key = key.trim();
filteredObject[key] = toBeFilteredObject[key];
});
有很多的方法之一可以去这个问题。到目前为止的答案假设你想修改现有的对象,但问题没有指定; “过滤器”一词暗示可能不是。所以如果你想创建一个新的过滤对象,而不是改变现有的对象,你可能会使用reduce函数。你说你的关键列表是一个字符串,但为了保持例子清洁,让我们假设你只是做str.split(',')
或类似的,所以它已经是一个数组,然后将它传递给这些函数。
ES5
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);
ES6
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);
该对象具有无效的键和值。 – Jai
更正了关键值对 –