我按以下方式使用 _.pick 方法
假设我有一个字符串数组,它只是我想从对象数组中的每个对象获取的属性名称
var wantedPropArray=["prop1","prop2","prop3.name"];
下面是我的对象数组
var objectArray = [
{"prop1":"prop1Data1","prop2":"prop2Data1","prop3":{"name":"Tom","age":"24","class":"graduate"},"prop4":"prop4Data1","prop5":"prop5Data1"},
{"prop1":"prop1Data2","prop2":"prop2Data2","prop3":{"name":"Cat","age":"24","class":"graduate"},"prop4":"prop4Data2","prop5":"prop5Data2"}
{"prop1":"prop1Data3","prop2":"prop2Data3","prop3":{"name":"Tom","age":"24","class":"graduate"},"prop4":"prop4Data3","prop5":"prop5Data3"}
{"prop1":"prop1Data4","prop2":"prop2Data4","prop3":{"name":"Tom","age":"24","class":"graduate"},"prop4":"prop4Data4","prop5":"prop5Data4"}
]
for( var item in objectArray ){
var objectArrayOnlySelectedProperties = _.pick(objectArray[item] , wantedPropArray);
}
假设第一次迭代让我们看到 objectArrayOnlySelectedProperties 数据, 我得到了
objectArrayOnlySelectedProperties = {"prop1":"prop1Data1","prop2":"prop2Data1"};
我希望它能给我这样的结果
objectArrayOnlySelectedProperties = {"prop1":"prop1Data1","prop2":"prop2Data1","prop3.name":"Tom"};
我的意思是 _.pick 方法无法查看 prop3 并获取 prop3.name。 谁能建议如何使用下划线的 pick 方法来匹配数组中每个对象的子属性。
提前致谢
最佳答案
开箱即用的 underscorejs 似乎不支持此功能。但是这个要点提供了混合支持:
https://gist.github.com/furf/3208381
这是一些使用上述要点来完成您需要的代码:http://jsfiddle.net/wHXCv/1/
_.mixin({
deep: function (obj, key) {
var keys = key.split('.'),
i = 0,
value = null,
n = keys.length;
while ((obj = obj[keys[i++]]) != null && i < n) {};
value = i < n ? void 0 : obj;
var result = {};
result[key]=value;
return result;
}
});
var objectArray = [
{"prop1":"prop1Data1","prop2":"prop2Data1","prop3":{"name":"Tom","age":"24","class":"graduate"},"prop4":"prop4Data1","prop5":"prop5Data1"},
{"prop1":"prop1Data2","prop2":"prop2Data2","prop3":{"name":"Cat","age":"24","class":"graduate"},"prop4":"prop4Data2","prop5":"prop5Data2"},
{"prop1":"prop1Data3","prop2":"prop2Data3","prop3":{"name":"Tom","age":"24","class":"graduate"},"prop4":"prop4Data3","prop5":"prop5Data3"},
{"prop1":"prop1Data4","prop2":"prop2Data4","prop3":{"name":"Tom","age":"24","class":"graduate"},"prop4":"prop4Data4","prop5":"prop5Data4"}];
var plucked = function(o, wantedPropArray) {
return _.reduce(wantedPropArray, function(acc, val){
acc.push(_.deep(o,val));
return acc;
},[]);
}
var answer = _.map(objectArray, function(o){
return plucked(o, ["prop1","prop2","prop3.name"]);
});
console.log(JSON.stringify(answer));
关于javascript - _.pick 方法匹配对象数组中的子属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15222493/