Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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 如何基于第一个对象的键从第二个对象获取键、值_Javascript_Arrays - Fatal编程技术网

Javascript 如何基于第一个对象的键从第二个对象获取键、值

Javascript 如何基于第一个对象的键从第二个对象获取键、值,javascript,arrays,Javascript,Arrays,我在形成一个对象数组时遇到了一个小问题 var json1 = [{ "PRODUCT_ID": "P02", "QUANTITY": 2 }, { "PRODUCT_ID": "P01", "QUANTITY": 61 }] var json2 = [{ "PRODUCT_ID": "P01", "NAME": "PEN" },{ "PRODUCT_ID": "P02", "NAME": "Pencil" }] 现

我在形成一个对象数组时遇到了一个小问题

    var json1 = [{
    "PRODUCT_ID": "P02",
    "QUANTITY": 2
},  {
    "PRODUCT_ID": "P01",
    "QUANTITY": 61
}]


var json2 = [{
    "PRODUCT_ID": "P01",
    "NAME": "PEN"
},{
    "PRODUCT_ID": "P02",
    "NAME": "Pencil"
}]
现在我需要像下面这样形成这个物体

var finalJSON = [{
    "PRODUCT_ID": "P01",
    "NAME": "PEN",
    "QUANTITY": 61
},{
    "PRODUCT_ID": "P02",
    "NAME": "Pencil",
    "QUANTITY": 2
}]
在这个例子中,我只给出了数组中的2个对象。但在实时情况下,将有数千个对象需要获取
NAME
字段。我是用循环来实现的。但是编译器的性能将以这种方式降低。有人能帮我用简单的方法实现吗?

你可以做如下事情

var json1=[{
“产品标识”:“P02”,
“数量”:2
},  {
“产品标识”:“P01”,
“数量”:61
}]
var json2=[{
“产品标识”:“P01”,
“名称”:“笔”
},{
“产品标识”:“P02”,
“名称”:“铅笔”
}]
const finalJson=json1.map(j1=>({…j1,…json2.filter(j2=>j2[“产品ID”]===j1[“产品ID”])[0]}))

console.log(finalJson)
您可以使用
map
map
集合在访问项目时拥有
O(1)

let unique = new Map(json2.map(s => [s.PRODUCT_ID, s.NAME]));
let result = json1.map(({PRODUCT_ID, QUANTITY})=> 
    ({PRODUCT_ID, QUANTITY, Name: unique.get(PRODUCT_ID)}));
var json1=[{
“产品标识”:“P02”,
“数量”:2
},  {
“产品标识”:“P01”,
“数量”:61
}]
var json2=[{
“产品标识”:“P01”,
“名称”:“笔”
},{
“产品标识”:“P02”,
“名称”:“铅笔”
}]
让unique=newmap(json2.Map(s=>[s.PRODUCT\u ID,s.NAME]);
让result=json1.map({PRODUCT\u ID,QUANTITY})=>
({PRODUCT_ID,QUANTITY,Name:unique.get(PRODUCT_ID)});

控制台日志(结果)您可以将一个简单对象作为哈希表,并通过检查哈希表来迭代数组

函数合并(目标,哈希={}){
返回函数(源){
用于(源的常量项){
if(!hash[item.PRODUCT_ID])target.push(hash[item.PRODUCT_ID]={});
分配(散列[item.PRODUCT\u ID],item);
}
};
}
var array1=[{PRODUCT_ID:“P02”,数量:2},{PRODUCT_ID:“P01”,数量:61}],
array2=[{PRODUCT_ID:“P01”,NAME:“PEN”},{PRODUCT_ID:“P02”,NAME:“Pencil”}],
结果=[];
[array1,array2].forEach(merge(result));
控制台日志(结果)
.as控制台包装{max height:100%!important;top:0;}
如果您想要“最快的”,这将取决于您在问题中未声明的许多内容

也就是说,在Linux、Firefox和我的PC上,从几个不同的JavaScript基准站点设置,以下代码对我来说运行得更快(与
map
merge
foreach
选项相比)

更大的测试样本(很有可能)、真实数据或其他任何东西都可能改变结果

var json1=[{
“产品标识”:“P02”,
“数量”:2
},{
“产品标识”:“P01”,
“数量”:61
}];
var json2=[{
“产品标识”:“P01”,
“名称”:“笔”
},{
“产品标识”:“P02”,
“名称”:“铅笔”
}];
var finalJSON=[];
变量i,j,max1=json1.length,max2=json2.length;
对于(j=0;j