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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何使兩個(gè)對(duì)象類型數(shù)組相交,包括合并它們的項(xiàng)目?

如何使兩個(gè)對(duì)象類型數(shù)組相交,包括合并它們的項(xiàng)目?

素胚勾勒不出你 2024-01-18 16:21:41
我有兩個(gè)長(zhǎng)度相等的數(shù)組,每個(gè)數(shù)組都包含對(duì)象數(shù)據(jù)。這是第一個(gè)數(shù)組的示例代碼......const array1 = [{  key: '5',  value: '550',}, {  key: '6',  value: '750',}];這是第二個(gè)的代碼......const array2 = [{  type: 'Job',  status: 'Finished',  key : '5',}, {  type: 'Ticket',  status: 'Processing',  key : '6',}];為了進(jìn)一步處理我的數(shù)據(jù),我需要兩個(gè)數(shù)組的交集及其相應(yīng)的對(duì)象項(xiàng)被合并。結(jié)果應(yīng)該是這樣的......[{  key: '5',  value: '550',  type: 'Job',  status: 'Finished',}, {  key: '6',  value: '750',  type: 'Ticket',  status: 'Processing',}]到目前為止我想出的是..array1.forEach(function (element) {  array2.forEach(function (element) {    return {      type: 'Ticket',      status: 'Processing'    };  });});我不知道如何創(chuàng)建預(yù)期的結(jié)果。我的問題的解決方案是什么樣的?
查看完整描述

3 回答

?
一只甜甜圈

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超5個(gè)贊

您可以將對(duì)象存儲(chǔ)在哈希表中,key并將另一個(gè)數(shù)組與哈希表中的數(shù)據(jù)合并。


const

    array1 = [{ key: '5', value: '550' }, { key: '6', value: '750' }],

    array2 = [{ type: 'Job', status: 'Finished', key: '5' }, { type: 'Ticket', status: 'Processing', key: '6' }],

    temp = Object.fromEntries(array2.map(o => [o.key, o])),

    result = array1.map(o => ({ ...o, ...temp[o.key] }));


console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }


查看完整回答
反對(duì) 回復(fù) 2024-01-18
?
紅糖糍粑

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超6個(gè)贊

利用Array.prototype.map它可以將附加target對(duì)象傳遞給...,這里可以使用第二個(gè)數(shù)組,從中檢索相應(yīng)的合并項(xiàng)。

合并是通過Object.assign將兩個(gè)數(shù)組項(xiàng)合并到一個(gè)新創(chuàng)建的對(duì)象中來完成的,以便不改變?nèi)我簧婕皵?shù)組的任何合并項(xiàng)......

const array1 = [{

? key: '5',

? value: '550',

}, {

? key: '6',

? value: '750',

}];


const array2 = [{

? type: 'Job',

? status: 'Finished',

? key : '5',

}, {

? type: 'Ticket',

? status: 'Processing',

? key : '6',

}];


function mergeWithSameIndexItemFromBoundArray(item, idx) {

? const boundArray = this;

? return Object.assign({}, item, boundArray[idx]);

}


console.log(

? 'merge result of array2 and array1 ...',

? array2.map(mergeWithSameIndexItemFromBoundArray, array1)

);

console.log(

? 'merge result of array1 and array2 ...',

? array1.map(mergeWithSameIndexItemFromBoundArray, array2)

);

.as-console-wrapper { min-height: 100%!important; top: 0; }

如果存在不匹配的商品訂單數(shù)組,可以基于上述方法向 提供額外的目標(biāo)對(duì)象map。

這次不是第二個(gè)數(shù)組,而是它的一個(gè)變換;一個(gè)對(duì)象,它使用標(biāo)識(shí)所有項(xiàng)目的屬性名稱將第二個(gè)數(shù)組的所有項(xiàng)目映射到它。對(duì)于OP的示例,該屬性名稱是key。

因此,需要編寫一個(gè)附加函數(shù)來完成此映射任務(wù)。下面的下一個(gè)示例選擇一種基于 的方法Array.prototype.reduce。

此外,必須重寫映射器函數(shù),以便通過簡(jiǎn)單地使用數(shù)組項(xiàng)的key屬性而不是之前的數(shù)組索引來利用之前創(chuàng)建的綁定映射...

const array1 = [{

? key: '5',

? value: '550',

}, {

? key: '7',

? value: '320',

}, {

? key: '6',

? value: '750',

}];


const array2 = [{

? type: 'Ticket',

? status: 'Processing',

? key : '6',

}, {

? type: 'Job',

? status: 'Finished',

? key : '5',

}, {

? type: 'Task',

? status: 'Pending',

? key : '7',

}];


function createKeyBasedItemMap(map, item) {

? map[item.key] = item;

? return map;

}

function mergeWithKeyBasedItemFromBoundMap(item) {

? return Object.assign({}, item, this[item.key]);

}


console.log(

? 'map-based merge of unordered array2 and array1 items ...',

? array2.map(

? ? mergeWithKeyBasedItemFromBoundMap,

? ? array1.reduce(createKeyBasedItemMap, {})

? )

);

console.log(

? 'map-based merge of unordered array1 and array2 items ...',

? array1.map(

? ? mergeWithKeyBasedItemFromBoundMap,

? ? array2.reduce(createKeyBasedItemMap, {})

? )

);

console.log('\n');


console.log(

? 'proof of concept ... the item-map based on array1 ...',

? array1.reduce(createKeyBasedItemMap, {})

);

console.log(

? 'proof of concept ... the item-map based on array2 ...',

? array2.reduce(createKeyBasedItemMap, {})

);

.as-console-wrapper { min-height: 100%!important; top: 0; }


查看完整回答
反對(duì) 回復(fù) 2024-01-18
?
心有法竹

TA貢獻(xiàn)1866條經(jīng)驗(yàn) 獲得超5個(gè)贊

聽起來您需要通過鍵將兩個(gè)數(shù)組中的對(duì)象組合起來。數(shù)組方法是一個(gè)不錯(cuò)的選擇,但您還應(yīng)該研究其他方法。

const?combinedItemsArray?=?array1.map(item1?=>?{
???????const?matchingItem?=?array2.find(item2?=>?item2.key?===?item1.key)?
???????return?{...item1,?...matchingItem?}
})

這使用擴(kuò)展運(yùn)算符將項(xiàng)目的值與匹配的鍵組合起來。

需要考慮的一些事項(xiàng):

  • Array.find 僅匹配數(shù)組 2 中滿足結(jié)果的第一項(xiàng)。因此,如果數(shù)組中的項(xiàng)具有重復(fù)的鍵,則需要對(duì)其進(jìn)行修改。

  • 如果數(shù)組中有很多項(xiàng)目(10 個(gè)或 1000 個(gè)),這將在性能級(jí)別上崩潰。在這種情況下,哈希表答案可能是更好的方法。

查看完整回答
反對(duì) 回復(fù) 2024-01-18
  • 3 回答
  • 0 關(guān)注
  • 188 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)