Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.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 通过嵌套数组循环JSON以查看所有值是否相等_Javascript_Arrays_Node.js_Json - Fatal编程技术网

Javascript 通过嵌套数组循环JSON以查看所有值是否相等

Javascript 通过嵌套数组循环JSON以查看所有值是否相等,javascript,arrays,node.js,json,Javascript,Arrays,Node.js,Json,基本上,我想看看有多少人购买同一个供应商,有多少人一起购买不同的品牌。我事先就知道这些牌子了 我想循环浏览这个JSON响应中的所有对象,如果所有“line_items”的“vendor”值都相同,那么控制台日志“这些订单有相同的品牌”+订单号。如果它们是不同的控制台日志“这些订单有不同的品牌”+订单号 { “命令”:[ { “电子邮件”:“鲍勃。norman@hostmail.com", “订单号”:1001, “行项目”:[ { “id”:466157049, “变体标题”:“绿色”, “供

基本上,我想看看有多少人购买同一个供应商,有多少人一起购买不同的品牌。我事先就知道这些牌子了

我想循环浏览这个JSON响应中的所有对象,如果所有“line_items”的“vendor”值都相同,那么控制台日志“这些订单有相同的品牌”+订单号。如果它们是不同的控制台日志“这些订单有不同的品牌”+订单号

{
“命令”:[
{
“电子邮件”:“鲍勃。norman@hostmail.com",
“订单号”:1001,
“行项目”:[
{
“id”:466157049,
“变体标题”:“绿色”,
“供应商”:“Windows”
},
{
“id”:466157049,
“变体标题”:“绿色”,
“供应商”:“Windows”
}
]
},
{
“电子邮件”:“约翰。candy@hostmail.com",
“订单号”:1002,
“行项目”:[
{
“id”:466157049,
“变体标题”:“绿色”,
“供应商”:“Windows”
},
{
“id”:466157049,
“变体标题”:“绿色”,
“供应商”:“苹果”
},
{
“id”:466157049,
“变体标题”:“绿色”,
“供应商”:“Windows”
}
]
}
]

}
将JSON加载到代码中

首先,必须加载JSON。如果您想从本地存档加载它,您必须加载它并为此创建一个函数。由于加载归档文件是一个异步操作,因此您需要传递一个回调来告诉函数在加载完成后如何处理该数据。在该回调中,您将告诉您的程序如何处理JSON

一个函数实现来实现这一点。您还可以将其用于一般用途,并为其指定一个参数,以指定文件位置,然后替换“my_data.json”部分

如果您想使用对API的get调用获取JSON,或者使用Node.js获取您自己的后端(因为问题的标记是Node.js),那么您可以使用Node.js

在这个模块中,您需要特别使用一个GET-passing选项或带有回调的URL

处理JSON

一旦JSON就绪并存储在变量中,您就需要首先解析它,因为它将作为字符串出现

var parsedJSON = JSON.parse(myJson); //Where myJson is a variable where it is stored
然后,您就可以使用带有嵌套对象数组的Javascript对象了

现在进入循环:

parsedJSON.orders.forEach((order) => {
  let areEqual = order['line_items'].reduce((result, item, currentIndex, items) => {
    if (currentIndex === 0) {
        return true;
    }

    if (currentIndex - 1 < items.length) {
        const previousVendor = items[currentIndex - 1].vendor; //Previous one
        if (y.vendor !== previousVendor) //We compare them
          return result && false; //Since they are different we use the logic operator && with false so this is enough to say that there is an instance where there are at least two different
    }

    return result && true; // <= If they are equal. We can just return acc aswell
  });

  if (areEqual) console.log(order['order_number']);
});
parsedJSON.orders.forEach((订单)=>{
让areEqual=订单['line_items']。减少((结果、项目、当前索引、项目)=>{
如果(currentIndex==0){
返回true;
}
if(当前索引-1返回结果&&true;//让我们从一个函数开始,该函数检查数组的所有元素是否相等:

const allEqual=([x,…ys])=>
y.every(y=>y==x);
console.log(
allEqual([1,2,2]),//false
allEqual([1,1,1]),//true
allEqual([1]),//true
allEqual([])//真

)
将问题分解为小部分(可重复使用!)的漂亮演示xo