Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.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/2/jquery/81.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_Jquery_Arrays - Fatal编程技术网

Javascript 将数组的子集与原始数组进行比较

Javascript 将数组的子集与原始数组进行比较,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有两个数组,都包含对象,它们之间的公共字段是名称。我想将这些数组中的数据输出到一个简单的表中。但是,由于一个数组是另一个数组的子集,因此在填充表时,数据不在正确的位置。我想用0来填补这些空白。例如: // Array 1: [ { Name: A, Value: 7 }, { Name: B, Value: 13 }, { Name: C, Value: 36 }, { Name: D, Value: 43 } ] // Array 2: [ { Name: A,

我有两个数组,都包含对象,它们之间的公共字段是名称。我想将这些数组中的数据输出到一个简单的表中。但是,由于一个数组是另一个数组的子集,因此在填充表时,数据不在正确的位置。我想用
0
来填补这些空白。例如:

// Array 1:
[
  { Name: A, Value: 7 }, 
  { Name: B, Value: 13 }, 
  { Name: C, Value: 36 }, 
  { Name: D, Value: 43 }
]

// Array 2:
[
  { Name: A, Value: 3 }, 
  { Name: C, Value: 21 }, 
  { Name: D, Value: 15 }
]
目前,输出表如下所示:

A | 3  | 7
B | 21 | 13
C | 15 | 36
D |    | 43
A | 3  | 7
B | 0  | 13
C | 21 | 36
D | 15 | 43
但我希望它看起来像这样:

A | 3  | 7
B | 21 | 13
C | 15 | 36
D |    | 43
A | 3  | 7
B | 0  | 13
C | 21 | 36
D | 15 | 43
我使用的代码是:

for(var j = 0; j < array1.length; j++) {
  var row = "<tr><td>Name : " + array1[j]["Name"] + "</td>" +
    "<td>Name : " + array2[j]["Value"] + "</td>" +
    "<td>Name : " + array1[j]["Value"] + "</td></tr>";
  $("#TABLE").append(row);
}
for(var j=0;j

这只是一个示例,我当前的代码遵循相同的行,但是,初始数据直接从数据库中提取并插入到JSON数组中。在此方面的任何帮助都将不胜感激。谢谢

据我所知,您需要一个名为| arr2 | arr1的表,优先考虑arr1,因此请尝试以下方法:

//数组1:
var arr1=[{Name:“A”,Value:7},{Name:“B”,Value:13},{Name:“C”,Value:36},{Name:“D”,Value:43}];
//阵列2:
var arr2=[{Name:“A”,值:3},{Name:“C”,值:21},{Name:“D”,值:15}];
var结果=arr1.map(函数(el1){
返回“+el1.Name+”|“+(arr2.filter(函数(el2)){
返回el1.Name==el2.Name;
}).map(功能(el2){
返回el2.值;
})[0]| | 0)+“|”+el1.Value+”;
}).加入(“”);
$('#result').html(result)

您可以做的不是在
数组1中循环,而是首先检查相同的名称是否也在
数组2中。如果是,则可以使用该
array2
值,但如果不是,则应使用0

以下代码将引导您到达:

var array1=[{Name:“A”,值:7},{Name:“B”,值:13},{Name:“C”,值:36},{Name:“D”,值:43}]
var array2=[{Name:“A”,值:3},{Name:“C”,值:21},{Name:“D”,值:15}]
对于(var j=0;j
表tr td,表tr th{
填充:10px;
边框:1px纯黑;
}

名称
阿拉瓦
阿拉瓦
var行=$(“00”。重复(4));
变量数组1=[
{Name:“A”,值:7},
{名称:“B”,值:13},
{名称:“C”,值:36},
{名称:“D”,值:43}
]
变量array2=[
{Name:“A”,值:3},
{名称:“C”,值:21},
{名称:“D”,值:15}
]
对于(变量i=0;i

您可以使用以下功能:

// for each item in the first array...
array1.forEach(function(item) {
    // try to find a match in the second array
    var item2 = array2.find(function(i) { return i.Name === item.Name; });

    // build out the row HTML, defaulting a value of 0 when match is not found
    var row = "<tr><td>Name : " + item.Name + "</td>" +
    "<td>Name : " + (item2 ? item2.Value : 0) + "</td>" +
    "<td>Name : " + item.Value + "</td></tr>";

    // append row to table
    $("#TABLE").append(row);
});
//对于第一个数组中的每个项。。。
阵列1.forEach(功能(项目){
//尝试在第二个数组中查找匹配项
var item2=array2.find(函数(i){returni.Name==item.Name;});
//生成HTML行,未找到匹配项时默认值为0
var row=“Name:”+项目名称+“”+
名称:“+(项2?项2.值:0)+”+
名称:“+item.Value+”;
//将行追加到表中
$(“#表”)。追加(行);
});

这不是最有效的方法,但仍然想指出,这种方法也可以做到

var a=[
{Name:“A”,值:7},
{名称:“B”,值:13},
{名称:“C”,值:36},
{名称:“D”,值:43}
];
变量b=[
{Name:“A”,值:3},
{名称:“C”,值:21},
{名称:“D”,值:15}
];
var temp=a.concat(b);
var输出=[];

对于(var i=0;我只是想说明一下,我相信使用您的代码片段,您的输出表实际上会完全丢失一行,因为
array2
只有3个项目的长度。从
array1
中获取额外的元素不会循环第四次。这在我看来提出了一个问题:
array1
是否总是有“full”如果
array2
具有
array1
不具有的值,那么数据,或者反过来是一种可能性吗?理解,尽管我仍然相信我评论中的问题将为我们提供一些重要信息。您说过一个数组是另一个数组的子集,这让我相信永远不会有
array2的情况e> 有
array1
没有的数据。这是正确的吗?修复了,这是一个输入错误。我对子集的理解不是太好,我的意思是
array2
永远不会大于
array1
。因此它在数组中的项数可能相同,也可能更少。但是,它永远不会有更多。这些名称就是我n
array2
也将始终位于
array1
中。因此
array2
不能包含不在
array1
中的内容。如果这有意义的话?谢谢,这在我现有的代码中非常有效!