Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.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,早些时候我问了一个类似的问题,但不清楚。我正在构建一个数组。目前我正在这样做 let myArray = []; const header = ["Category", "Count", { role: 'style' }]; const categories = ["cat1", "cat2", "cat3", "cat4"]; const colors = ["red", "blue", "silver", "yellow"]; myArray.push(header); categorie

早些时候我问了一个类似的问题,但不清楚。我正在构建一个数组。目前我正在这样做

let myArray = [];
const header = ["Category", "Count", { role: 'style' }];
const categories = ["cat1", "cat2", "cat3", "cat4"];
const colors = ["red", "blue", "silver", "yellow"];
myArray.push(header);
categories.forEach((x,i) => {
    myArray.push([x, 0, colors[i]]);
});
console.log(JSON.stringify(myArray));
上面的输出如下所示

[
    ["Category","Count",{"role":"style"}],
    ["cat1",0,"red"],
    ["cat2",0,"blue"],
    ["cat3",0,"silver"],
    ["cat4",0,"yellow"]
]
您可以看到计数当前手动设置为0。然后,我从服务器中检索到第二个数组,名为
dataArray
。这篇文章的内容是

[
    {"Category":"cat3","Count":59},
    {"Category":"cat1","Count":109},
    {"Category":"cat2","Count":120},
    {"Category":"cat4","Count":57}
]
我要做的是,使用上面生成的
myArray
,我需要使用在
dataArray
中为类别找到的正确计数来切换0。所以本质上,
myArray
应该是这样结束的

[
    ["Category","Count",{"role":"style"}],
    ["cat1",109,"red"],
    ["cat2",120,"blue"],
    ["cat3",59,"silver"],
    ["cat4",57,"yellow"]
]
我如何交叉比较这两个阵列


感谢

根据您的服务器数据,创建要计数的类别地图:

  const countOf = new Map();

  for(const { Category, Count } of serverData)
    countOf.set(Category, Count);
然后,您可以查看您的表格,查找计数并替换它:

 const Count = 1, Category = 0;

 for(const row of table.slice(1))
   row[Count] = countOf.get(row[Category]);
快不脏:

让myArray=[];
const header=[“Category”,“Count”,“role:'style'}];
常数类别=[“cat1”、“cat2”、“cat3”、“cat4”];
常量颜色=[“红色”、“蓝色”、“银色”、“黄色”];
myArray.push(头文件);
类别。forEach((x,i)=>{
push([x,0,colors[i]]);
});
常量数据数组=[
{“类别”:“cat3”,“计数”:59},
{“类别”:“cat1”,“计数”:109},
{“类别”:“cat2”,“计数”:120},
{“类别”:“cat4”,“计数”:57}
];
dataArray.forEach(e=>{
const elementToUpdate=myArray.find(x=>x[0]==e.Category);
elementToUpdate&(elementToUpdate[1]=e.Count);
});
log(myArray)试试看

let数据=[
[“类别”、“计数”、“角色”:“样式”}],
[“cat1”,0,“红色”],
[“cat2”,0,“蓝色”],
[“cat3”,0,“银色”],
[“cat4”,0,“黄色”]
]
让dataArray=[
{“类别”:“cat3”,“计数”:59},
{“类别”:“cat1”,“计数”:109},
{“类别”:“cat2”,“计数”:120},
{“类别”:“cat4”,“计数”:57}
]
让cat={};
forEach(x=>cat[x.Category]=x.Count);
data.forEach((x,i)=>i>0?x[1]=cat[x[0]]:0);

控制台日志(数据)我想你的问题是你有一个数组

var array1 = [
    ["Category","Count",{"role":"style"}],
    ["cat1",0,"red"],
    ["cat2",0,"blue"],
    ["cat3",0,"silver"],
    ["cat4",0,"yellow"]
]
和来自服务器的另一个阵列

var serverarr = [
    {"Category":"cat3","Count":59},
    {"Category":"cat1","Count":109},
    {"Category":"cat2","Count":120},
    {"Category":"cat4","Count":57}
]
现在你需要生产

[
    ["Category","Count",{"role":"style"}],
    ["cat1",109,"red"],
    ["cat2",120,"blue"],
    ["cat3",59,"silver"],
    ["cat4",57,"yellow"]
]
要将其存档,您需要执行以下操作

serverarr.forEach(item =>{
  array1.forEach(data =>{
    if(data[0] === item.Category){
     data[1] = item.Count; 
    }   
  });
});

现在您的
array1
将获得您想要的结果

我也遇到过类似的情况,我相信下面的内容会得到您想要的结果。我认为它也很容易阅读,尽管我的变量名当然可以被替换

dataArray.forEach((x) => {
    myArray.forEach((z) => {
        if (z.includes(x.Category)) {
            z.splice(z.indexOf('0'), 0, x.Count);
        }
    });
});

这和你问的问题和我回答的问题一模一样。你在2小时前评论说输出是错误的(这也是因为你的解释很弱),现在你问的是同样的问题。等一天左右,然后像这样做。最好穿上它。你需要有耐心。@maheer不,不是真的。这个问题略有不同。(它要求合并两个表)只是为了澄清@MaheerAli的问题。在他们的辩护中,问题非常相似。我认为我对初始问题的措辞不正确,因此没有得到预期的结果。然而,这让我可以更清楚地问这个问题,这就是我在这里所做的。为了帮助我更好地理解事情,如果你对答案投反对票,你能评论一下吗。我只是想看看为什么可能是错的。@kate_hudson如果答案不起作用或者只是无法解释的代码转储,我会投反对票。我也在这里……:)
dataArray.forEach((x) => {
    myArray.forEach((z) => {
        if (z.includes(x.Category)) {
            z.splice(z.indexOf('0'), 0, x.Count);
        }
    });
});