2016-02-26 74 views
0

我使用lodash在我的项目的JavaScript库,并在获取父阵列键对象过滤的对象有一个问题:获取深嵌套的对象父阵列关键lodash

我有以下数据:

var data = { 
5: [{ 
    id: "3", 
    label: "Manish" 
}, { 
    id: "6", 
    label: "Rahul" 
}, { 
    id: "7", 
    label: "Vikash" 
}], 
8: [{ 
    id: "16", 
    label: "Pankaj" 
}, { 
    id: "45", 
    label: "Akash" 
}], 
9: [{ 
    id: "15", 
    label: "Sunil" 
}] 
} 

我的要求是,如果我的[6,16]则数组我想包含值5,8一个新的结果数组,因为这两个数组键包含id:"6" and id:"16"

我尝试了用_.f对象latten和_.pick方法,但无法工作。我使用了下面的代码;

var list = []; 
_.each(data, function(item){ 
    list.push(_.omit(item, 'id')); 
    list.push(_.flatten(_.pick(item, 'id'))); 
}); 
var result = _.flatten(list); 
console.log(result); 

有人可以帮助我。

+0

可以接受jQuery解决方案吗? –

回答

0

如果简单的JavaScript的解决方案是与你没关系然后

var searchId=[6,16]; 
var newArr = []; 
for (key in data){ 
    data[key].forEach(function(innerValue){ 
     if (searchId.indexOf(Number(innerValue.id)) != -1) newArr.push(key); 
    }); 
} 

console.log(newArr); 
+0

它很好,但lodash不提供任何简短的解决方案吗? –

+0

@ ManishJangirBlogaddition.com对不起,我没有在lodash工作。如果没有其他人向你提供lodash解决方案(因为你超过15分钟前发布),那么你可以使用我的。 – gurvinder372

+0

嗨,为什么它不工作,如果searchId = $('#multiselect-dropdown')。val(); –

0

试试这个:

(希望我不是缺少一些语法)

var result = []; 
var filterArray = [6,16]; 
_.each(filterArray, function(item){ 
_.merge(result,_.filter(data, function(o) { return _.contains(o,{id:item}) })); 
}); 
+0

TypeError:_.contains不是函数的输出是什么 –

1
var res = _([6, 16]).map(function(id){ 
    return _.findKey(data, function(arr){ 
     return _.some(arr, {id: new String(id)}); 
    }) 
}).compact().uniq().value(); 
0

使用_.pickBy这问题很简单:

var myArr = [6, 16] 

var res = _.pickBy(data, function (value) { 
    return _(value).map('id').map(_.toNumber).intersection(myArr).size(); 
}); 

console.log(res) 

https://jsfiddle.net/7s4s7h3w/