Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果javascript中的项id相同,则映射两个数组以将不同的数据合并到一个数组中_Javascript_Arrays - Fatal编程技术网

如果javascript中的项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

多亏了另一篇文章,我才得以在我教的这一简单过程中领先一步。。 但我似乎无法通过按“id”公共字段“分组”的方式将两个数组合并为一个数组

下面是我的一个数组:

// 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额外工具=[
{
额外费用