如果javascript中的项id相同,则映射两个数组以将不同的数据合并到一个数组中
多亏了另一篇文章,我才得以在我教的这一简单过程中领先一步。。 但我似乎无法通过按“id”公共字段“分组”的方式将两个数组合并为一个数组 下面是我的一个数组:如果javascript中的项id相同,则映射两个数组以将不同的数据合并到一个数组中,javascript,arrays,Javascript,Arrays,多亏了另一篇文章,我才得以在我教的这一简单过程中领先一步。。 但我似乎无法通过按“id”公共字段“分组”的方式将两个数组合并为一个数组 下面是我的一个数组: // editedItem.extra_tools /// 0: { extra_tool_password: "tool data password" extra_tool_username: "tool data username" id_extra_tool: &quo
// editedItem.extra_tools ///
0:
{
extra_tool_password: "tool data password"
extra_tool_username: "tool data username"
id_extra_tool: "8"
},
1:
{
extra_tool_password: "tool data password"
extra_tool_username: "tool data username"
id_extra_tool: "1"
},
2:
{
extra_tool_password: "tool data password"
extra_tool_username: "tool data username"
id_extra_tool: "7"
}
应通过id_extra_工具将其合并到:
// this.extras //
0:
{
extra_params: 1
extra_tool_name: "tool 1"
extra_tool_password: ""
extra_tool_username: ""
id_extra_tool: 1
}
1:
{
extra_params: 1
extra_tool_name: "tool 2"
extra_tool_password: ""
extra_tool_username: ""
id_extra_tool: 7
}
{
2:
extra_params: 0
extra_tool_name: "tool 3"
extra_tool_password: ""
extra_tool_username: ""
id_extra_tool: 8
得到
//mergedArray //
if (this.editedItem.extra_tools.length) {
var mergedArray = []
this.editedItem.extra_tools.map(x => {
this.extras.map(y => {
if (x.id_extra_tool === y.id_extra_tool) {
mergedArray.push(Object.assign(x, y))
}
})
})
因此,最终的数组应该包含来自每个数组的“完整”数据,通过id\u extra\u工具完成每个项合并数据
// merged //
0:
{
extra_params: // TAKEN_BY: "Extras"
extra_tool_name: // TAKEN_BY: "Extras"
extra_tool_password:// TAKEN_BY: "extra_tools"
extra_tool_username: // TAKEN_BY: "extra_tools"
id_extra_tool: 1
}
1:
{
extra_params: // TAKEN_BY: "Extras"
extra_tool_name: // TAKEN_BY: "Extras"
extra_tool_password:// TAKEN_BY: "extra_tools"
extra_tool_username: // TAKEN_BY: "extra_tools"
id_extra_tool: 7
}
{
2:
extra_params: // TAKEN_BY: "Extras"
extra_tool_name: // TAKEN_BY: "Extras"
extra_tool_password:// TAKEN_BY: "extra_tools"
extra_tool_username: // TAKEN_BY: "extra_tools"
id_extra_tool: 8
editem.extra\u工具
中的id\u extra\u工具
和this.extra
的类型(字符串与数字)不同,因此比较x.id\u extra\u工具===y.id\u extra\u工具
将始终返回false,请改为使用=/code>
使用地图的简短示例:
const mergedArray=this.extras.map(项=>({
…项目,
…editItem.extra\u tools.find(i=>i.id\u extra\u tool==item.id\u extra\u tool)
}));
editem.extra\u工具中的id\u extra\u工具
和this.extra
的类型不同(字符串与数字),因此比较x.id\u extra\u工具===y.id\u extra\u工具
将始终返回false,请尝试改为使用=
使用地图的简短示例:
const mergedArray=this.extras.map(项=>({
…项目,
…editItem.extra\u tools.find(i=>i.id\u extra\u tool==item.id\u extra\u tool)
}));
您试图使用==
将字符串
与整数
进行比较,这是错误的(请改用=
)
最好使用.find
检查每个x
元素是否在extras
中有一个对应的对象,并且使用相同的id\u extra\u工具
:
const editem={
额外工具:[
{
额外工具密码:“工具数据密码”,
额外工具用户名:“工具数据用户名”,
id_额外工具:“8”
},
{
额外工具密码:“工具数据密码”,
额外工具用户名:“工具数据用户名”,
id\u额外工具:“1”
},
{
额外工具密码:“工具数据密码”,
额外工具用户名:“工具数据用户名”,
id_额外工具:“7”
}
]
};
临时演员=[
{
额外参数:1,
额外工具名称:“工具1”,
额外工具密码:“”,
额外工具用户名:“”,
id\u额外工具:1
},
{
额外参数:1,
额外工具名称:“工具2”,
额外工具密码:“”,
额外工具用户名:“”,
id_额外工具:7
},
{
额外参数:0,
额外工具名称:“工具3”,
额外工具密码:“”,
额外工具用户名:“”,
id_额外工具:8
}
];
if(editem.extra_tools.length){
var mergedArray=[];
editem.extra_tools.map(x=>{
consty=extras.find(e=>e.id\u extra\u tool==x.id\u extra\u tool);
如果(y){
mergedArray.push(Object.assign(x,y))
}
});
console.log(mergedArray);
}
您试图使用==
将字符串
与整数
进行比较,这是错误的(请改用=
)
最好使用.find
检查每个x
元素是否在extras
中有一个对应的对象,并且使用相同的id\u extra\u工具
:
const editem={
额外工具:[
{
额外工具密码:“工具数据密码”,
额外工具用户名:“工具数据用户名”,
id_额外工具:“8”
},
{
额外工具密码:“工具数据密码”,
额外工具用户名:“工具数据用户名”,
id\u额外工具:“1”
},
{
额外工具密码:“工具数据密码”,
额外工具用户名:“工具数据用户名”,
id_额外工具:“7”
}
]
};
临时演员=[
{
额外参数:1,
额外工具名称:“工具1”,
额外工具密码:“”,
额外工具用户名:“”,
id\u额外工具:1
},
{
额外参数:1,
额外工具名称:“工具2”,
额外工具密码:“”,
额外工具用户名:“”,
id_额外工具:7
},
{
额外参数:0,
额外工具名称:“工具3”,
额外工具密码:“”,
额外工具用户名:“”,
id_额外工具:8
}
];
if(editem.extra_tools.length){
var mergedArray=[];
editem.extra_tools.map(x=>{
consty=extras.find(e=>e.id\u extra\u tool==x.id\u extra\u tool);
如果(y){
mergedArray.push(Object.assign(x,y))
}
});
console.log(mergedArray);
}
首先,我将使用id\u extra\u工具作为对象键,在key/value对象中构建一个数组,假设id\u extra\u工具总是唯一的。这有助于提高性能
然后与第二个数组合并
// build key/value object
obj = {};
editedItem.extra_tools.map((value) => {
obj[value.id_extra_tool] = value;
});
// iterate other array and merge
const result = this.extras.map((extra) => {
return Object.assign(obj[extra.id_extra_tool], extra);
});
const额外工具=[
{
额外工具密码:“工具数据密码”,
额外工具用户名:“工具数据用户名”,
id_额外工具:“8”
},
{
额外工具密码:“工具数据密码”,
额外工具用户名:“工具数据用户名”,
id\u额外工具:“1”
},
{
额外工具密码:“工具数据密码”,
额外工具用户名:“工具数据用户名”,
id_额外工具:“7”
}
];
临时演员=[
{
额外参数:1,
额外工具名称:“工具1”,
额外工具密码:“”,
额外工具用户名:“”,
id\u额外工具:1
},
{
额外参数:1,
额外工具名称:“工具2”,
额外工具密码:“”,
额外工具用户名:“”,
id_额外工具:7
},
{
额外参数:0,
额外工具名称:“工具3”,
额外工具密码:“”,
额外工具用户名:“”,
id_额外工具:8
}
];
obj={};
额外工具映射((值)=>{
obj[value.id\u extra\u tool]=值;
});
//迭代其他数组
const result=extras.map((extra)=>{
返回Object.assign(extra,obj[extra.id\u extra\u tool]);
});
控制台日志(结果)代码>首先,我将使用id\u extra\u工具作为对象键,在key/value对象中构建一个数组,假设id\u extra\u工具总是唯一的。这有助于提高性能
然后与第二个数组合并
// build key/value object
obj = {};
editedItem.extra_tools.map((value) => {
obj[value.id_extra_tool] = value;
});
// iterate other array and merge
const result = this.extras.map((extra) => {
return Object.assign(obj[extra.id_extra_tool], extra);
});
const额外工具=[
{
额外费用