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);
}
});
});