javascript - _.pick 方法匹配对象数组中的子属性

标签 javascript underscore.js

我按以下方式使用 _.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/

相关文章:

javascript - 在哪里传递公式字段的量化数据值?

javascript - 让谷歌地图回调等待其余功能完成

javascript - 循环后的 Jquery 在每个 div 中显示结果

javascript - 为什么 Backbone.View 对象仍然保留在内存中?

javascript - 是否有测试对象是否与其他对象匹配的功能?

javascript - 从解析类传递现有对象,否则创建一个新对象

javascript - 下划线 _.intersection() - 怎么做?

javascript - 如何更改我的输入类型范围的缩略图颜色?

javascript - 有没有用 JavaScript 实现的图表绘制器?

javascript - 使用 Backbone.js 获取随下拉菜单变化的段落