Javascript 用第二个数组中的匹配属性替换一个数组中的值
我有两个阵列:Javascript 用第二个数组中的匹配属性替换一个数组中的值,javascript,Javascript,我有两个阵列: arrayOne = ["green","blue","purple"] 及 我希望返回数组是[1,8,9],在数组two的末尾将“purple”作为一个对象推送(使用新id) 最有效的方法是什么?下面的代码使用map来检索第二个数组中元素的id,或者,如果该元素不存在,则通过将该数组中最后一个id增加1来创建一个新的元素 arrayOne=[“绿色”、“蓝色”、“紫色”] 阵列双=[ {姓名:“绿色”,id:1}, {姓名:“红色”,id:2}, {姓名:“黄色”,id:3
arrayOne = ["green","blue","purple"]
及
我希望返回数组是[1,8,9]
,在数组two
的末尾将“purple”作为一个对象推送(使用新id)
最有效的方法是什么?下面的代码使用
map
来检索第二个数组中元素的id
,或者,如果该元素不存在,则通过将该数组中最后一个id
增加1来创建一个新的元素
arrayOne=[“绿色”、“蓝色”、“紫色”]
阵列双=[
{姓名:“绿色”,id:1},
{姓名:“红色”,id:2},
{姓名:“黄色”,id:3},
{姓名:“蓝色”,id:8},
]
const newArr=arrayOne.map(颜色=>{
const found=arrayTwo.find(el=>el.name==color);
如果(找到){
返回find.id;
}
const newId=arrayTwo[arrayTwo.length-1].id+1;
push({name:color,id:newId});
返回newId;
});
控制台日志(newArr);
控制台日志(arrayTwo)
以下代码使用map
检索第二个数组中元素的id
,或者,如果该元素不存在,则通过将该数组中最后一个id
增加1来创建一个新元素
arrayOne=[“绿色”、“蓝色”、“紫色”]
阵列双=[
{姓名:“绿色”,id:1},
{姓名:“红色”,id:2},
{姓名:“黄色”,id:3},
{姓名:“蓝色”,id:8},
]
const newArr=arrayOne.map(颜色=>{
const found=arrayTwo.find(el=>el.name==color);
如果(找到){
返回find.id;
}
const newId=arrayTwo[arrayTwo.length-1].id+1;
push({name:color,id:newId});
返回newId;
});
控制台日志(newArr);
控制台日志(arrayTwo)
您可以将arrayTwo
转换为映射
(为了效率),其中名称
是键,id
是值。然后,一旦完成此操作,就可以使用每个名称元素作为查找键,将.map()
arrayOne
放入id
的数组中,以获取其关联的id。如果发现名称不在map
中,则可以向arrayTwo
数组中添加一个新对象,并增加id
计数器:
const arrayOne=[“绿色”、“蓝色”、“紫色”];
const arrayTwo=[{name:“绿色”,id:1},{name:“红色”,id:2},{name:“黄色”,id:3},{name:“蓝色”,id:8},];
let[{id:l_id}]=arrayTwo.slice(-1);
constlut=newmap(arrayTwo.Map({name,id})=>[name,id]);
const res=arrayOne.map(name=>lut.get(name)| |(arrayTwo.push({name,id:++l_id}),l_id));
控制台日志(res);
控制台日志(arrayTwo)
您可以将arrayTwo
转换为映射
(为了效率),其中名称
是键,id
是值。然后,一旦完成此操作,就可以使用每个名称元素作为查找键,将.map()
arrayOne
放入id
的数组中,以获取其关联的id。如果发现名称不在map
中,则可以向arrayTwo
数组中添加一个新对象,并增加id
计数器:
const arrayOne=[“绿色”、“蓝色”、“紫色”];
const arrayTwo=[{name:“绿色”,id:1},{name:“红色”,id:2},{name:“黄色”,id:3},{name:“蓝色”,id:8},];
let[{id:l_id}]=arrayTwo.slice(-1);
constlut=newmap(arrayTwo.Map({name,id})=>[name,id]);
const res=arrayOne.map(name=>lut.get(name)| |(arrayTwo.push({name,id:++l_id}),l_id));
控制台日志(res);
控制台日志(arrayTwo)代码>此代码可以实现您想要的:
让数组two=[
{姓名:“绿色”,id:1},
{姓名:“红色”,id:2},
{姓名:“黄色”,id:3},
{姓名:“蓝色”,id:8},
];
让索引={},lastId=0;
arrayTwo.forEach({name,id})=>{
如果(索引[name]=id,id>lastId)lastId=id
});
函数getResult(a){
返回a.map(e=>index[e]| |(arrayTwo.push({name:e,id:++lastId}),index[e]=lastId))
}
//数组内容
let result=getResult([“绿色”、“蓝色”、“紫色”);
console.log(arrayTwo,result);
//与其他数据
让result2=getResult([“青色”、“蓝色”、“紫色”、“天蓝”);
console.log(arrayTwo,result2)代码>此代码可以实现您想要的:
让数组two=[
{姓名:“绿色”,id:1},
{姓名:“红色”,id:2},
{姓名:“黄色”,id:3},
{姓名:“蓝色”,id:8},
];
让索引={},lastId=0;
arrayTwo.forEach({name,id})=>{
如果(索引[name]=id,id>lastId)lastId=id
});
函数getResult(a){
返回a.map(e=>index[e]| |(arrayTwo.push({name:e,id:++lastId}),index[e]=lastId))
}
//数组内容
let result=getResult([“绿色”、“蓝色”、“紫色”);
console.log(arrayTwo,result);
//与其他数据
让result2=getResult([“青色”、“蓝色”、“紫色”、“天蓝”);
console.log(arrayTwo,result2)
9是紫色的id吗?将数组转换成哈希映射,其中键是name,值是id,然后执行操作将需要O(n)个id
s在arrayTwo
上排序吗?@Eddie让我们假设它们是。@StevenB。紫色没有id(还没有),它不存在于arrayTwo
9是紫色的id吗?将数组转换成哈希映射,其中键是name,值是id,然后执行操作需要O(n)是id
在arrayTwo
上排序吗?@Eddie让我们假设它们是。@StevenB。紫色没有id(尚未),它不存在于arrayTwo
中。请注意,假设arrayTwo
中的最后一项包含最高的id
可能很脆弱。在这种情况下,您总是可以找到max ID.props,以了解OP的期望值,也可以找到这样一个详细的回复NickNote,即假设数组中的最后一项包含最高的ID
,这可能很脆弱。在这种情况下,您总是可以找到max ID.props来计算出
arrayTwo = [
{ name: "green", id: 1 },
{ name: "red", id: 2 },
{ name: "yellow", id: 3 },
{ name: "blue", id: 8 },
]