在jQuery中查找数组和对象的公共键

时间:2018-09-28 13:15:52

标签: javascript jquery

我有2个具有相似值的数组。我想要的是获取数组和对象的交集-

第一个对象的console.log是-

{  
   "1221":{  
      "oldPrice":{  
         "amount":75
      },
      "basePrice":{  
         "amount":75
      },
      "finalPrice":{  
         "amount":75
      },
      "tierPrices":[  

      ]
   },
   "1222":{  
      "oldPrice":{  
         "amount":75
      },
      "basePrice":{  
         "amount":75
      },
      "finalPrice":{  
         "amount":75
      },
      "tierPrices":[  

      ]
   },
   "1223":{  
      "oldPrice":{  
         "amount":75
      },
      "basePrice":{  
         "amount":75
      },
      "finalPrice":{  
         "amount":75
      },
      "tierPrices":[  

      ]
   },
   "1224":{  
      "oldPrice":{  
         "amount":80
      },
      "basePrice":{  
         "amount":80
      },
      "finalPrice":{  
         "amount":80
      },
      "tierPrices":[  

      ]
   }
}

第二个数组的console.log是-

[["1222","1223","1224"]]

所以基本上,我想获得第一个对象的id等于第二个数组,即1222、1223和1224。

我尝试使用inArray,但是它不起作用。

3 个答案:

答案 0 :(得分:1)

您可以使用Array.reduceObject.assign

let obj = {"1221":{"oldPrice":{"amount":75},"basePrice":{"amount":75},"finalPrice":{"amount":75},"tierPrices":[]},"1222":{"oldPrice":{"amount":75},"basePrice":{"amount":75},"finalPrice":{"amount":75},"tierPrices":[]},"1223":{"oldPrice":{"amount":75},"basePrice":{"amount":75},"finalPrice":{"amount":75},"tierPrices":[]},"1224":{"oldPrice":{"amount":80},"basePrice":{"amount":80},"finalPrice":{"amount":80},"tierPrices":[]}};

let arr = [["1222","1223","1224"]];

let result = arr[0].reduce((a,c) => Object.assign(a, {[c] : obj[c]}), {});
console.log(result);

注意:如果array中缺少object中的条目,则可以将代码更新为以下内容

let obj = {"1221":{"oldPrice":{"amount":75},"basePrice":{"amount":75},"finalPrice":{"amount":75},"tierPrices":[]},"1222":{"oldPrice":{"amount":75},"basePrice":{"amount":75},"finalPrice":{"amount":75},"tierPrices":[]},"1223":{"oldPrice":{"amount":75},"basePrice":{"amount":75},"finalPrice":{"amount":75},"tierPrices":[]},"1224":{"oldPrice":{"amount":80},"basePrice":{"amount":80},"finalPrice":{"amount":80},"tierPrices":[]}};

let arr = [["missing_entry_from_obj", "1222","1223","1224"]];

let result = arr[0].reduce((a,c) => {if(obj[c]) a[c]= obj[c]; return a;}, {});
console.log(result);

答案 1 :(得分:0)

您可以使用数组映射来工作:

var a1 = {  
   "1221":{  
      "oldPrice":{  
         "amount":75
      },
      "basePrice":{  
         "amount":75
      },
      "finalPrice":{  
         "amount":75
      },
      "tierPrices":[  

      ]
   },
   "1222":{  
      "oldPrice":{  
         "amount":75
      },
      "basePrice":{  
         "amount":75
      },
      "finalPrice":{  
         "amount":75
      },
      "tierPrices":[  

      ]
   },
   "1223":{  
      "oldPrice":{  
         "amount":75
      },
      "basePrice":{  
         "amount":75
      },
      "finalPrice":{  
         "amount":75
      },
      "tierPrices":[  

      ]
   },
   "1224":{  
      "oldPrice":{  
         "amount":80
      },
      "basePrice":{  
         "amount":80
      },
      "finalPrice":{  
         "amount":80
      },
      "tierPrices":[  

      ]
   }
};
var a2 = [["1222","1223","1224"]];
var result = {};
a2[0].map(current=>{
    var temp = a1[current];
    result[current] = temp;
});
console.log(result);

答案 2 :(得分:0)

您可以映射现有对象或false(如果找不到)。然后创建零件的新对象。

var object = { 1221: { oldPrice: { amount: 75 }, basePrice: { amount: 75 }, finalPrice: { amount: 75 }, tierPrices: [] }, 1222: { oldPrice: { amount: 75 }, basePrice: { amount: 75 }, finalPrice: { amount: 75 }, tierPrices: [] }, 1223: { oldPrice: { amount: 75 }, basePrice: { amount: 75 }, finalPrice: { amount: 75 }, tierPrices: [] }, 1224: { oldPrice: { amount: 80 }, basePrice: { amount: 80 }, finalPrice: { amount: 80 }, tierPrices: [] } },
    keys = ["1222", "1223", "1224"],
    result = Object.assign(...keys.map(k => k in object && { [k]: object[k] }));
    
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }