簡體   English   中英

比較兩個具有不同數量屬性的數組,並使用javascript根據條件將第三個數組與比較值映射

[英]compare two arrays having different number of properties and mapping a third array with compared values on condition using javascript

我有2個數組

var array1 = ["1", "2", "3", "4", "5", "6"]

var array2 = [
  { offId: "4", offname: "four" },
  { offId: "9", offname: "nine" },
  { offId: "15", offname: "fifteen" },
  { offid: "3", offname: "three" },
  { offId: "1", offname: "one" },
  { offId: "0", offname: "zero" },
  { offId: "8", offname: "eight" },
  { offId: "10", offname: "ten" },
]

我需要將兩個數組與offId的值進行比較,結果數組應為

var array3 = [
  { offId: "1", offname: "one" },
  { offId: "2", offname: "" },
  { offId: "3", offname: "three" },
  { offId: "4", offname: "four" },
  { offId: "5", offname: "" },
  { offId: "6", offname: "" },
]

我怎么能做到這一點(數組的長度可以相同或不同)

 var array1 = ["1", "2", "3", "4", "5", "6"]; var array2 = [ { offId: "4", offname: "four" }, { offId: "9", offname: "nine" }, { offId: "15", offname: "fifteen" }, { offId: "3", offname: "three" }, { offId: "1", offname: "one" }, { offId: "0", offname: "zero" }, { offId: "8", offname: "eight" }, { offId: "10", offname: "ten" }, ]; var array3 = array1.map(val => array2.filter(obj => obj.offId == val)[0] || { offId: val, offname: "" }); console.log(array3); 

最簡單的方法是簡單地filter()第二個數組:

const array3 = array2.filter(v => array1.includes(v.offId));

這將遍歷array2每個元素,而僅將其offIdarray1offId

如果您需要對其進行排序,則只需在其末尾添加排序:

const array3 = array2.filter(v => array1.includes(v.offId))
  .sort((a, b) => b.offId > a.offId ? 1 : a.offId < b.offId ? -1 : 0);

如果您需要對其進行數字排序(即,您想在10之前加2),則需要強制轉換它們的值,但是您可以將它們相減:

const array3 = array2.filter(v => array1.includes(v.offId))
  .sort((a, b) => parseInt(b.offId) - parseInt(a.offId));

您可以拍攝Map並使用存儲的對象或新對象。

 var array1 = ["1", "2", "3", "4", "5", "6"], array2 = [{ offId: "4", offname: "four" }, { offId: "9", offname: "nine" }, { offId: "15", offname: "fifteen" }, { offId: "3", offname: "three" }, { offId: "1", offname: "one" }, { offId: "0", offname: "zero" }, { offId: "8", offname: "eight" }, { offId: "10", offname: "ten" }], map = array2.reduce((m, o) => m.set(o.offId, o), new Map), result = array1.map(offId => map.get(offId) || { offId, offname: '' }); console.log(result); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

您可以使用Array.reducearray1array2創建array3

步驟如下:

  • acc (累積數組)最初將包含空數組。
  • 使用Array.find檢查curr (當前變量)是否在array2中。
  • 如果a.offIdcurr值匹配,則Array.find將返回對象。
  • 如果找到obj ,則將obj推入acc (累積數組)
  • 否則將{offId: curr, offname: ''}{offId: curr, offname: ''}數組中

 var array1 = ["1", "2", "3", "4", "5", "6"] var array2 = [ { offId: "4", offname: "four" }, { offId: "9", offname: "nine" }, { offId: "15", offname: "fifteen" }, { offId: "3", offname: "three" }, { offId: "1", offname: "one" }, { offId: "0", offname: "zero" }, { offId: "8", offname: "eight" }, { offId: "10", offname: "ten" }, ] var array3 = array1.reduce((acc, curr) => { var obj = array2.find(a => a.offId === curr); if (obj) { acc.push(obj); } else { acc.push({ offId: curr, offname: ""}); } return acc; }, []); console.log(array3); 

暫無
暫無

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

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