<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          8種JavaScript比較數(shù)組的方法

          共 5171字,需瀏覽 11分鐘

           ·

          2021-05-06 17:48

          英文 | https://javascript.plainenglish.io/7-methods-for-comparing-arrays-in-javascript-88f10c071897
          翻譯 | web前端開法公眾號(hào)

          我一直喜歡報(bào)紙之類的東西,可以在較短的時(shí)間內(nèi)提供足夠的信息。在這里,我為前端開發(fā)列了一個(gè)比較數(shù)組的方法清單。介紹一些基于“屬性”值對(duì)數(shù)組進(jìn)行排序的方法。

          我們可能會(huì)遇到一些其他方式來(lái)比較兩個(gè)對(duì)象數(shù)組并發(fā)現(xiàn)它們的差異,或者比較和刪除重復(fù)項(xiàng),或者比較兩個(gè)對(duì)象數(shù)組并更新對(duì)象數(shù)組的屬性,或者在比較兩個(gè)對(duì)象之后創(chuàng)建具有唯一數(shù)據(jù)的新數(shù)組的方法對(duì)象數(shù)組。讓我們看看比較對(duì)象和執(zhí)行操作的不同方法是什么。

          1、比較兩個(gè)對(duì)象數(shù)組,刪除重復(fù)項(xiàng),根據(jù)屬性合并對(duì)象

          我們確實(shí)需要比較兩個(gè)不同的對(duì)象數(shù)組,并希望在兩個(gè)對(duì)象匹配特定屬性值的情況下合并這兩個(gè)對(duì)象。可以使用filter()方法來(lái)實(shí)現(xiàn)。
          該filter()方法創(chuàng)建一個(gè)新數(shù)組,其中所有元素都通過(guò)了由提供的功能實(shí)現(xiàn)的測(cè)試。
          讓我們創(chuàng)建測(cè)試數(shù)據(jù):
          let array1 = [{ id: "50", active: "a", value: 10 },{ id: "51", active: "a", value: 11 }];let array2 = [{ id: "53", active: "a", value: 10 },{ id: "51", active: "a", value: 11 },{ id: "52", active: "a", value: 13 }];

          讓我們創(chuàng)建函數(shù):

          let res = array2.filter(val =>    array1.some(({        value    }) => (val.value as any) === (value as any)));console.log("1", JSON.stringify(res));//[{"id":"53","active":"a","value":10},{"id":"51","active":"a","value":11}]

          2、比較兩個(gè)對(duì)象數(shù)組,合并和更新值(假設(shè)數(shù)組3,4共享相同的ID)

          有時(shí)我們確實(shí)會(huì)有這樣的需求,將兩個(gè)不同的屬性與新的屬性值合并。我們可以使用map()創(chuàng)建一組新的對(duì)象數(shù)組,并且可以使用find()方法在更新新值之前匹配特定屬性。

          該map()方法創(chuàng)建一個(gè)新數(shù)組,其中填充了在調(diào)用數(shù)組中每個(gè)元素上調(diào)用提供的函數(shù)的結(jié)果。

          該find()方法返回提供的數(shù)組中滿足提供的測(cè)試功能的第一個(gè)元素的值。如果沒(méi)有值滿足測(cè)試功能,undefined則返回。

          讓我們創(chuàng)建測(cè)試數(shù)據(jù):

          let array3 = [{ id: "50", active: "a", value: 12 },{ id: "51", active: "a", value: 15 }];let array4 = [{ id: "50", active: "a", value: 10 },{ id: "51", active: "a", value: 11 },{ id: "52", active: "a", value: 13 }];

          讓我們創(chuàng)建函數(shù):

          let arr = [];array3.map(id =>    arr.push({        id: id.id,        newValue: array4.find(o => o.id === id.id).value + 2    }));console.log("2", JSON.stringify(arr));//[{"id":"50","newValue":12},{"id":"51","newValue":13}]

          3、比較對(duì)象數(shù)組并找到唯一的對(duì)象

          如果我們要比較兩個(gè)對(duì)象數(shù)組并檢查其中哪些是唯一對(duì)象,則可以使用filter()來(lái)實(shí)現(xiàn)這些功能。

          讓我們創(chuàng)建測(cè)試數(shù)據(jù):

          const array5 = [{ id: "50", active: "a", value: 12 },{ id: "51", active: "a", value: 15 }];const array6 = [{ id: "50", active: "a", value: 12 },{ id: "51", active: "a", value: 15 },{ id: "52", active: "a", value: 13 }];

          讓我們創(chuàng)建函數(shù):

          const ids = array5.map(e => e.id);let filtered = array6.filter(e => ids.includes(e.id));console.log("3", JSON.stringify(filtered));//[{"id":"50","active":"a","value":12},{"id":"51","active":"a","value":15}]

          4、根據(jù)匹配的值比較和更新屬性

          當(dāng)我們要比較兩個(gè)對(duì)象數(shù)組并根據(jù)匹配的值更新特定的屬性時(shí),可以使用這些函數(shù)。

          讓我們創(chuàng)建測(cè)試數(shù)據(jù):

          const array7 = [{ id: "50", active: "a", value: 12 },{ id: "51", active: "a", value: 15 }];const array8 = [{ id: "50", active: "a", value: 12 }];

          讓我們創(chuàng)建函數(shù):

          const idSet = new Set(array8.map(o => o.id));const res1 = array7.map(o => ({ ...o, value: idSet.has(o.id) ? "0" : o.value }));console.log("4", JSON.stringify(res1));//[{"id":"50","active":"a","value":"0"},{"id":"51","active":"a","value":15}]

          5、比較兩個(gè)數(shù)組對(duì)象并獲得差異

          當(dāng)我們要比較兩個(gè)不同的對(duì)象數(shù)組并得到它們之間的差異時(shí),可以使用這些函數(shù)。

          讓我們創(chuàng)建測(cè)試數(shù)據(jù):

          let a = [{ id: "50", active: "a", value: 10 },{ id: "51", active: "a", value: 11 }];let b = [{ id: "50", active: "a", value: 10 },{ id: "51", active: "a", value: 11 },{ id: "52", active: "a", value: 13 }];

          讓我們創(chuàng)建函數(shù):

          let valuesArray1 = a.reduce(function(a, c) {    a[c.value] = c.value;    return a;}, {});let valuesArray2 = b.reduce(function(a, c) {    a[c.value] = c.value;    return a;}, {});var result = a    .filter(function(c) {        return !valuesArray2[c.value];    })    .concat(        b.filter(function(c) {            return !valuesArray1[c.value];        })    );console.log("5", result);//[{"id":"52","active":"a","value":13}]//shorthandlet ab = b.filter(o => !a.find(o2 => o.id === o2.id));console.log("6", ab);

          6、比較對(duì)象的兩個(gè)數(shù)組合并,并刪除重復(fù)項(xiàng)

          如果我們有要求比較兩個(gè)對(duì)象數(shù)組并從它們中刪除重復(fù)項(xiàng)并合并兩個(gè)數(shù)組,則可以使用此方法。

          讓我們創(chuàng)建測(cè)試數(shù)據(jù):

          let arr1 = [{ id: "50", active: "a", value: 10 },{ id: "51", active: "a", value: 11 }];let arr2 = [{ id: "50", active: "a", value: 10 },{ id: "51", active: "a", value: 11 },{ id: "52", active: "a", value: 13 }];

          讓我們創(chuàng)建函數(shù):

          const arr1IDs = new Set(arr1.map(({ id }) => id));const combined = [...arr1, ...arr2.filter(({ id }) => !arr1IDs.has(id))];console.log(JSON.stringify(combined));//[{"id":"50","active":"a","value":10},{"id":"51","active":"a","value":11},{"id":"52","active":"a","value":13}]

          7、Lodash

          Lodash支持_differenceBy和 _differenceWith查找兩個(gè)數(shù)組之間差異的方法。

          let lodashtest1 = [{ id: "50" }, { id: "51" }];let lodashtest2 = [{ id: "50" }, { id: "51" }, { id: "52" }];let lodashresult = _.differenceBy(lodashtest2, lodashtest1, "id");console.log("7", JSON.stringify(lodashresult));//[{"id":"52"}]let dif = _.differenceWith(lodashtest2, lodashtest1, _.isEqual);console.log("8",JSON.stringify(dif));//[{"id":"52"}]

          8、比較對(duì)象并找到唯一值

          當(dāng)我們使用嵌套對(duì)象時(shí),有時(shí)很難弄清楚我們?nèi)绾蔚捅容^兩個(gè)嵌套對(duì)象并在其中獲得一些唯一的對(duì)象。我們可以使用Object.keys和Object.values方法進(jìn)行迭代。

          讓我們創(chuàng)建測(cè)試數(shù)據(jù):

          let obj1 = {val1: "test",stream: { prop1: false, prop2: true }};let obj2 = {val1: "test",stream: { prop1: true, prop2: true }};interface Data {stream: { [key: string]: boolean };}

          讓我們創(chuàng)建函數(shù):

          function objFilter(objA: Data, objB: Data): Data {let out: Data = { stream: {} };Object.keys(objA.stream).filter((value, idx) =>Object.values(objA.stream)[idx] === Object.values(objB.stream)[idx]? (out.stream[value] = Object.values(objA.stream)[idx]): false);return out;}console.log(JSON.stringify(objFilter(obj1, obj2))); //prop2//{"stream":{"prop2":true}}


          總結(jié)

          以上就是8種JavaScript比較數(shù)組的方法,希望對(duì)你有所幫助,最后,感謝閱讀,祝編程愉快!

          學(xué)習(xí)更多技能

          請(qǐng)點(diǎn)擊下方公眾號(hào)



          瀏覽 39
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  最近最火中文字幕mv歌词 | 操逼黄色片 | 韩国三级电影HD中文久久免费 | 中文字幕在线观看亚洲 | 国产大鸡吧自拍 |