Javascript 多维默认数组

Javascript 多维默认数组,javascript,lodash,Javascript,Lodash,我有两个多维数组: const defaultData = [ ["ad", 0], ["ae", 0], ["af", 0] ] const data = [ ["az", 20], ["ad", 50] ] 预期的结果是: const expected = [ ["ad", 50], ["ae", 0], ["af", 0] ] 此处az被忽略,因为它不在defaultData中,因此无效。 ad是有效的,因此0被值50覆盖 我怎样才能最好地产生这个结果

我有两个多维数组:

const defaultData = [
  ["ad", 0],
  ["ae", 0],
  ["af", 0]
]

const data = [
  ["az", 20],
  ["ad", 50]
]
预期的结果是:

const expected = [
  ["ad", 50],
  ["ae", 0],
  ["af", 0]
]
此处az被忽略,因为它不在defaultData中,因此无效。 ad是有效的,因此0被值50覆盖

我怎样才能最好地产生这个结果。谢谢

请假定两个数组都未排序。预期结果也不需要排序

vanilla JS或Lodash都可以。

试试看,我正在使用它创建一个新数组,并从第二个数组中查找元素

我比较默认数组中每个子数组的第一个索引项,如果第二个数组中的任何项在其第一个索引中具有相同的元素,则返回它,如果没有匹配项,则不返回任何内容

如果我有一个匹配的项,那么我将使用它的元素创建一个新数组。 如果没有匹配的项目,我将使用默认项目的默认元素创建一个新项目

const defaultData=[
[“广告”,0],
[“ae”,0],
[“af”,0]
]
常数数据=[
[“az”,20],
[“广告”,第50页]
]
让newData=defaultData.map(eachDefault=>{
let found=data.find(eachData=>{
if(eachData[0]==eachDefault[0]){
返回真值
}
})
如果(找到){
返回[…找到]
}
返回[…每个默认值]
})

log(newData)
您可以首先从数据创建一个对象,然后使用defaultData上的
map
方法创建新数组并通过键从数据中获取值

const defaultData=[
[“广告”,0],
[“ae”,0],
[“af”,0]
]
常数数据=[
[“az”,20],
[“广告”,第50页]
].reduce((r[键,值])=>{
r[键]=(r[键]| | 0)+值;
返回r;
}, {})
const expected=defaultData.map([key,value])=>{
返回[键,输入数据?数据[键]:值]
})

console.log(预期)
使用
\uu.fromPairs()
数据转换为对象(
dataByKey
)。映射
defaultData
,并检查
dataByKey
中是否存在“键”(索引0)。如果是,则使用
dataByKey
中的值创建一个新数组。如果不是,则返回原始数组

const defaultData=[
[“广告”,0],
[“ae”,0],
[“af”,0]
]
常数数据=[
[“az”,20],
[“广告”,第50页]
]
const dataByKey=u.fromPairs(数据)
const result=defaultData.map(在dataByKey中o=>o[0]?[o[0],dataByKey[o[0]]]:o)
console.log(结果)
用于迭代
默认数据
,并将每个迭代数组与
数据
匹配:

constdefaultdata=[['ad',0],'ae',0],'af',0];
常数数据=[[az',20],[ad',50];
const expected=defaultData.map(arr=>{
//从'arr'中解构第一个元素`
//并将其分配给`代码`
const[code]=arr;
//`find`在`data`中查找第一个元素所在的数组
//匹配`代码`
const found=data.find(el=>el[0]==code);
//如果'found'未定义,则返回整个数组
//否则,返回一个包含代码和值的新数组
//从找到的数组中
返回找到的?[代码,找到的[1]]:arr;
});

console.log(预期)您可以像这样使用map/reduce:

const defaultData=[
[“广告”,0],
[“ae”,0],
[“af”,0]
]
常数数据=[
[“az”,20],
[“广告”,第50页]
]
const result=defaultData.map(arr=>data.reduce([dKey,dVal],[key,val])=>dKey,dKey==key?val:dVal],arr));
控制台日志(结果)回答“试试这个:”是不受欢迎的。你应该解释你的代码。