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));
控制台日志(结果)代码>回答“试试这个:”是不受欢迎的。你应该解释你的代码。