第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在JavaScript中獲得兩個對象數組之間的區(qū)別

如何在JavaScript中獲得兩個對象數組之間的區(qū)別

繁華開滿天機 2019-07-15 16:15:09
如何在JavaScript中獲得兩個對象數組之間的區(qū)別我有兩個像這樣的結果集:// Result 1[     { value="0", display="Jamsheer" },     { value="1", display="Muhammed" },     { value="2", display="Ravi" },     { value="3", display="Ajmal" },     { value="4", display="Ryan" }]// Result 2[     { value="0", display="Jamsheer" },     { value="1", display="Muhammed" },     { value="2", display="Ravi" },     { value="3", display="Ajmal" },]我需要的最終結果是這些數組之間的區(qū)別-最終結果應該如下所示:[{ value="4", display="Ryan" }]在JavaScript中可以這樣做嗎?
查看完整描述

3 回答

?
小唯快跑啊

TA貢獻1863條經驗 獲得超2個贊

只使用本機JS,這樣的東西會起作用的:


a = [{ value:"4a55eff3-1e0d-4a81-9105-3ddd7521d642", display:"Jamsheer"}, { value:"644838b3-604d-4899-8b78-09e4799f586f", display:"Muhammed"}, { value:"b6ee537a-375c-45bd-b9d4-4dd84a75041d", display:"Ravi"}, { value:"e97339e1-939d-47ab-974c-1b68c9cfb536", display:"Ajmal"},  { value:"a63a6f77-c637-454e-abf2-dfb9b543af6c", display:"Ryan"}]

b = [{ value:"4a55eff3-1e0d-4a81-9105-3ddd7521d642", display:"Jamsheer", $$hashKey:"008"}, { value:"644838b3-604d-4899-8b78-09e4799f586f", display:"Muhammed", $$hashKey:"009"}, { value:"b6ee537a-375c-45bd-b9d4-4dd84a75041d", display:"Ravi", $$hashKey:"00A"}, { value:"e97339e1-939d-47ab-974c-1b68c9cfb536", display:"Ajmal", $$hashKey:"00B"}]


function comparer(otherArray){

  return function(current){

    return otherArray.filter(function(other){

      return other.value == current.value && other.display == current.display

    }).length == 0;

  }

}


var onlyInA = a.filter(comparer(b));

var onlyInB = b.filter(comparer(a));


result = onlyInA.concat(onlyInB);


console.log(result);


查看完整回答
反對 回復 2019-07-15
?
www說

TA貢獻1775條經驗 獲得超8個贊

你可以用Array.prototype.filter()結合在一起Array.prototype.some().

下面是一個示例(假設數組存儲在變量中)result1result2):

//Find values that are in result1 but not in result2var uniqueResultOne = result1.filter(function(obj) {
    return !result2.some(function(obj2) {
        return obj.value == obj2.value;
    });});//Find values that are in result2 but not in result1var uniqueResultTwo = result2.filter(function(obj) {
    return !result1.some(function(obj2) {
        return obj.value == obj2.value;
    });});//Combine the two arrays of unique entriesvar result = uniqueResultOne.concat(uniqueResultTwo);


查看完整回答
反對 回復 2019-07-15
?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

我采取的是一種稍微通用的方法,盡管在思想上與兩者的方法相似。@Cerbrus@Kasper Moerch..我創(chuàng)建了一個接受謂詞的函數來確定兩個對象是否相等(這里我們忽略了$$hashKey屬性,但它可以是任何內容)并返回一個函數,該函數根據該謂詞計算兩個列表的對稱差異:

a = [{ value:"4a55eff3-1e0d-4a81-9105-3ddd7521d642", display:"Jamsheer"}, { value:"644838b3-604d-4899-8b78-09e4799f586f", display:"Muhammed"}
, { value:"b6ee537a-375c-45bd-b9d4-4dd84a75041d", display:"Ravi"}, { value:"e97339e1-939d-47ab-974c-1b68c9cfb536", display:"Ajmal"},  
{ value:"a63a6f77-c637-454e-abf2-dfb9b543af6c", display:"Ryan"}]b = [{ value:"4a55eff3-1e0d-4a81-9105-3ddd7521d642", display:"Jamsheer",
 $$hashKey:"008"}, { value:"644838b3-604d-4899-8b78-09e4799f586f", display:"Muhammed", $$hashKey:"009"}, { value:"b6ee537a-375c-45bd-b9d4-
 4dd84a75041d", display:"Ravi", $$hashKey:"00A"}, { value:"e97339e1-939d-47ab-974c-1b68c9cfb536", display:"Ajmal", $$hashKey:"00B"}]var 
 makeSymmDiffFunc = (function() {
    var contains = function(pred, a, list) {
        var idx = -1, len = list.length;
        while (++idx < len) {if (pred(a, list[idx])) {return true;}}
        return false;
    };
    var complement = function(pred, a, b) {
        return a.filter(function(elem) {return !contains(pred, elem, b);});
    };
    return function(pred) {
        return function(a, b) {
            return complement(pred, a, b).concat(complement(pred, b, a));
        };
    };}());var myDiff = makeSymmDiffFunc(function(x, y) {
    return x.value === y.value && x.display === y.display;});var result = myDiff(a, b);
     //=>  {value="a63a6f77-c637-454e-abf2-dfb9b543af6c", display="Ryan"}

與Cerebrus的方法相比,它有一個小的優(yōu)勢(如同KasperMoerch的方法一樣),因為它提前逃脫;如果它找到了匹配的,它就不會去檢查列表的其余部分。如果我有一個curry函數HANDY,我會做一些不同的,但這是很好的工作。

解釋

一條評論要求為初學者提供更詳細的解釋。這是一次嘗試。

我們將以下函數傳遞給makeSymmDiffFunc:

function(x, y) {
    return x.value === y.value && x.display === y.display;}

這個函數是如何決定兩個對象是相等的。就像所有返回的函數一樣truefalse,它可以被稱為“謂詞函數”,但這只是術語而已。重點是makeSymmDiffFunc配置為一個函數,該函數接受兩個對象并返回true如果我們認為它們是平等的,false如果我們不這么做。

用這個,makeSymmDiffFunc(閱讀“制造對稱差分函數”)返回一個新函數:

        return function(a, b) {
            return complement(pred, a, b).concat(complement(pred, b, a));
        };

這是我們將實際使用的函數。我們傳遞給它兩個列表,它在第一個列表中找到元素,然后在第二個列表中找到元素,然后在第一個列表中找到元素,然后將這兩個列表組合在一起。

不過,再看一遍,我肯定會從您的代碼中得到提示,并通過以下方法對主函數進行相當大的簡化some:

var makeSymmDiffFunc = (function() {
    var complement = function(pred, a, b) {
        return a.filter(function(x) {
            return !b.some(function(y) {return pred(x, y);});
        });
    };
    return function(pred) {
        return function(a, b) {
            return complement(pred, a, b).concat(complement(pred, b, a));
        };
    };}());

complement使用謂詞并返回第一個列表中的元素,而不是第二個列表中的元素。這比我第一次單獨通過contains功能。

最后,主函數包裝在一個立即調用的函數表達式中(生命)保持內部complement在全球范圍之外發(fā)揮作用。


更新,幾年后

既然ES 2015已經變得相當普及,我建議采用同樣的技術,少得多的樣板:

const diffBy = (pred) => (a, b) => a.filter(x => !b.some(y => pred(x, y)))const makeSymmDiffFunc = (pred) => (a, b) => 
diffBy(pred)(a, b).concat(diffBy(pred)(b, a))const myDiff = makeSymmDiffFunc((x, y) => x.value === y.value && x.display 
=== y.display)const result = myDiff(a, b)//=>  {value="a63a6f77-c637-454e-abf2-dfb9b543af6c", display="Ryan"}


查看完整回答
反對 回復 2019-07-15
  • 3 回答
  • 0 關注
  • 690 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號