簡體   English   中英

使用lodash獲取深層嵌套對象中的父數組鍵

[英]Get parent array key in deep nested object using lodash

我在我的項目中使用Lodash JavaScript庫,但在獲取父數組鍵對象過濾對象時遇到問題:

我有以下數據:

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"

我嘗試使用_.flatten和_.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);
var res = _([6, 16]).map(function(id){
    return _.findKey(data, function(arr){
        return _.some(arr, {id: new String(id)});
    })
}).compact().uniq().value();

如果您可以使用簡單的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);

嘗試這個:

(希望我不會缺少一些語法)

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

使用_.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/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM