簡體   English   中英

在所有鍵值對都是唯一的對象數組中查找對象

[英]Find object in array of objects where all key-value pairs are unique

假設我有一個對象數組 {key:string} ,其中所有鍵值對都是唯一的(鍵或值在不同的對象中允許相同,但鍵值對相同​​)

const arr = [{a_1:"val_1"}, {a_2:"val_2"}, ..., {a_n:"val_n"}];

我有一個目標對象

const target = {a_i: "val_i"};

我想查找target存在於arr即它的鍵和值是否與arr中的某個對象匹配。 如果為真,那么我希望返回來自arr的對象。

示例:(已編輯)

const target = {foo: "bar"};
const arr = [{foo: "bar"}, {corona: "COVID-19"}, {foo: "notBar"}, {notFoo: "bar"}];

在這個例子中,搜索的targetarr將返回{foo:"bar"}arr

筆記:

arr.find(ob => ob === target);

返回未定義。

這兩個有不同的參考。 也許使用JSON.stringify()它可以工作。

 const target = {foo: "bar"}; const arr = [{foo: "bar"}, {corona: "COVID-19"}]; const result = arr.find(ob => JSON.stringify(ob) === JSON.stringify(target)); console.log(result);

或者使用.every()的更好選擇如下:

 const target = {foo: "bar"}; const arr = [{foo: "bar"}, {corona: "COVID-19"}]; const keysT = Object.keys(target); const result = arr.find(e => { const keysE = Object.keys(e); return keysE.length === keysT.length && keysE.every(k => e[k] === target[k]) }); console.log(result);

我希望這有幫助!

如果鍵不按順序就可以了。 但如果目標對象的鍵值對象本身,則不是。

const target = {foo: "bar"};
const arr = [{foo: "bar"}, {corona: "COVID-19"}];

arr.find(ob => {
  for (key in target) {
    if (!(key in ob)) return false;
    if (ob[key] !== target[key]) return false;
  }
  return true;
});

編輯:
“鑰匙不按順序”,我的意思是:

const target = {foo: "bar", bar: "foo"};
const arr = [{bar: "foo", foo: "bar"}, {corona: "COVID-19", foo: "bar"}];

如果目標選項中有單個鍵/值對,則可以使用Array.prototype.some()查找源數組(直到找到匹配項)並使用Object.entries()提取目標鍵/值,像那樣:

 const arr = [{a_1:"val_1"}, {a_2:"val_2"}, {a_n:"val_n"}], target = {a_2: "val_2"}, [[targetKey, targetValue]] = Object.entries(target), hasMatch = arr.some(item => targetKey in item && item[targetKey] == targetValue) console.log(hasMatch)
 .as-console-wrapper{min-height:100%;}

暫無
暫無

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

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