【问题标题】:Compare two arrays and find each values count using javascript比较两个数组并使用 javascript 查找每个值计数
【发布时间】:2018-01-07 23:25:01
【问题描述】:

我有两个数组。

这是我的数组。

 var arr=[
"08-01-2017",
"07-31-2017",
"07-30-2017",
"07-29-2017",
"07-28-2017",
"07-27-2017",
"07-26-2017"]

这是另一个数组

 var arr1= [
      {
        "HOST": "",
        "U_ID": "",
        "PATH": "Home",
        "REFERER": "",
        "AGENT": "",
        "OS": "",
        "DATE_TIME": "2017-07-31T05:44:06.743Z",
        "S_ID": "80067826-0cad-4806-b40e-8e5d8be18e53",
        "C_ID": "",
        "C_NAME": "",
        "P_ID": "",
        "P_NAME": "",
        "CART_ID": "",
        "O_ID": "",
        "id": "597c20a636c81d38dc77c626"
      },
      {
        "HOST": "",
        "U_ID": "",
        "PATH": "ProductlistPage",
        "REFERER": "Home",
        "AGENT": "",
        "OS": "",
        "DATE_TIME": "2017-07-30T05:44:22.425Z",
        "S_ID": "7fe1795a-5064-43d7-9a62-48b0f156a2c3",
        "C_ID": "1",
        "C_NAME": "Sparklers",
        "P_ID": "",
        "P_NAME": "",
        "CART_ID": "",
        "O_ID": "",
        "id": "597c20b636c81d38dc77c627"
      },
      {
        "HOST": "",
        "U_ID": "",
        "PATH": "ProductlistPage",
        "REFERER": "Home",
        "AGENT": "",
        "OS": "",
        "DATE_TIME": "2017-07-29T05:45:25.064Z",
        "S_ID": "439667fe-ab24-4bf6-959e-152a4f631fe3",
        "C_ID": "595f40038c4d19b50ac21b98",
        "C_NAME": "Sparklers",
        "P_ID": "",
        "P_NAME": "",
        "CART_ID": "",
        "O_ID": "",
        "id": "597c20f536c81d38dc77c628"
      },
      {
        "HOST": "",
        "U_ID": "",
        "PATH": "ProductdetailsPage",
        "REFERER": "ProductlistPage",
        "AGENT": "",
        "OS": "",
        "DATE_TIME": "2017-07-29T05:45:39.047Z",
        "S_ID": "a21c273a-372e-4a81-9997-d468d5efd299",
        "C_ID": "1",
        "C_NAME": "Sparklers",
        "P_ID": "595f3e418c4d19b50ac21b84",
        "P_NAME": "Martina",
        "CART_ID": "",
        "O_ID": "",
        "id": "597c210236c81d38dc77c629"
      },
      {
        "HOST": "",
        "U_ID": "",
        "PATH": "Home",
        "REFERER": "",
        "AGENT": "",
        "OS": "",
        "DATE_TIME": "2017-07-28T05:47:15.604Z",
        "S_ID": "a4278659-8053-45fd-8a95-78766fd7541b",
        "C_ID": "",
        "C_NAME": "",
        "P_ID": "",
        "P_NAME": "",
        "CART_ID": "",
        "O_ID": "",
        "id": "597c216336c81d38dc77c62a"
      },
      {
        "HOST": "",
        "U_ID": "",
        "PATH": "ProductlistPage",
        "REFERER": "Home",
        "AGENT": "",
        "OS": "",
        "DATE_TIME": "2017-07-27T05:47:22.700Z",
        "S_ID": "874bb326-ab02-4061-a029-bef5977d4c65",
        "C_ID": "595f40038c4d19b50ac21b98",
        "C_NAME": "Sparklers",
        "P_ID": "",
        "P_NAME": "",
        "CART_ID": "",
        "O_ID": "",
        "id": "597c216b36c81d38dc77c62b"
      },
      {
        "HOST": "",
        "U_ID": "",
        "PATH": "CartPage",
        "REFERER": "ProductlistPage",
        "AGENT": "",
        "OS": "",
        "DATE_TIME": "2017-07-27T05:47:25.758Z",
        "S_ID": "dd9096f9-79ea-4d86-81ce-149e364ab1ed",
        "C_ID": "1",
        "C_NAME": "Sparklers",
        "P_ID": "",
        "P_NAME": "",
        "CART_ID": "",
        "O_ID": "",
        "id": "597c216d36c81d38dc77c62c"
      },
      {
        "HOST": "",
        "U_ID": "",
        "PATH": "ProductdetailsPage",
        "REFERER": "ProductlistPage",
        "AGENT": "",
        "OS": "",
        "DATE_TIME": "2017-07-29T05:47:42.047Z",
        "S_ID": "4ed84c84-80ec-4494-9ffe-453f19e2c079",
        "C_ID": "1",
        "P_ID": "595f3e418c4d19b50ac21b84",
        "P_NAME": "Martina",
        "CART_ID": "",
        "O_ID": "",
        "id": "597c217d36c81d38dc77c62d"
      },
      {
        "HOST": "",
        "U_ID": "",
        "PATH": "CartPage",
        "REFERER": "ProductdetailsPage",
        "AGENT": "",
        "OS": "",
        "DATE_TIME": "2017-07-29T05:47:45.174Z",
        "S_ID": "91153a97-d79e-4d86-9872-5df51bd7e82f",
        "C_ID": "1",
        "P_ID": "595f3e418c4d19b50ac21b84",
        "P_NAME": "Martina",
        "CART_ID": "",
        "O_ID": "",
        "id": "597c218136c81d38dc77c62e"
      },
      {
        "HOST": "",
        "U_ID": "59687ee6cd62a604e2bb0d1f",
        "PATH": "CustomershippingPage",
        "REFERER": "cartPage",
        "AGENT": "",
        "OS": "",
        "DATE_TIME": "2017-07-29T05:48:20.386Z",
        "S_ID": "46866f41-9f43-4d28-a602-490db68dc029",
        "C_ID": "",
        "C_NAME": "",
        "P_ID": "",
        "P_NAME": "",
        "CART_ID": "597c21a336c81d38dc77c62f",
        "O_ID": "",
        "id": "597c21a436c81d38dc77c630"
      },
      {
        "HOST": "",
        "U_ID": "59687ee6cd62a604e2bb0d1f",
        "PATH": "customerpayment",
        "REFERER": "CustomershippingPage",
        "AGENT": "",
        "OS": "",
        "DATE_TIME": "2017-01-08T05:48:46.356Z",
        "S_ID": "56ad3bd7-854b-42e9-8443-46c514eb2ece",
        "C_ID": "",
        "C_NAME": "",
        "P_ID": "",
        "P_NAME": "",
        "CART_ID": "597c21a336c81d38dc77c62f",
        "O_ID": "",
        "id": "597c21be36c81d38dc77c631"
       }
    ]

我需要比较两个数组。查找匹配值并计数。

示例arr 是日期列表。比较基于DATE_TIME 的另一个数组arr1

08-01-2017 重复一次。 07-29-2017 重复五次。

我需要这个输出

 08-01-2017 - 2 <- Count(How many times repeated)
 07-29-2017 - 5
 07-28-2017 - 3 etc..

每个(arr)值是重复的次数。

我不知道。

请多多指教,

谢谢

【问题讨论】:

  • 你期望什么输出?这? [{d: 08-01-2017, c: 2}, [{d: 01-01-2010, c: 0}, ...]
  • 你的数组中的日期格式不一样。如果您解析所有这些,arr1 中不会出现 8-1-2017

标签: javascript arrays


【解决方案1】:

您可以从 ISO 日期中提取日期,然后使用用户 array#reduce 和 array#filter 来计算出现次数。

const arr=["08-01-2017","07-31-2017","07-30-2017","07-29-2017","07-28-2017","07-27-2017","07-26-2017"];
const arr1= [
      {
        "HOST": "",
        "U_ID": "",
        "PATH": "Home",
        "REFERER": "",
        "AGENT": "",
        "OS": "",
        "DATE_TIME": "2017-07-31T05:44:06.743Z",
        "S_ID": "80067826-0cad-4806-b40e-8e5d8be18e53",
        "C_ID": "",
        "C_NAME": "",
        "P_ID": "",
        "P_NAME": "",
        "CART_ID": "",
        "O_ID": "",
        "id": "597c20a636c81d38dc77c626"
      },
      {
        "HOST": "",
        "U_ID": "",
        "PATH": "ProductlistPage",
        "REFERER": "Home",
        "AGENT": "",
        "OS": "",
        "DATE_TIME": "2017-07-30T05:44:22.425Z",
        "S_ID": "7fe1795a-5064-43d7-9a62-48b0f156a2c3",
        "C_ID": "1",
        "C_NAME": "Sparklers",
        "P_ID": "",
        "P_NAME": "",
        "CART_ID": "",
        "O_ID": "",
        "id": "597c20b636c81d38dc77c627"
      },
      {
        "HOST": "",
        "U_ID": "",
        "PATH": "ProductlistPage",
        "REFERER": "Home",
        "AGENT": "",
        "OS": "",
        "DATE_TIME": "2017-07-29T05:45:25.064Z",
        "S_ID": "439667fe-ab24-4bf6-959e-152a4f631fe3",
        "C_ID": "595f40038c4d19b50ac21b98",
        "C_NAME": "Sparklers",
        "P_ID": "",
        "P_NAME": "",
        "CART_ID": "",
        "O_ID": "",
        "id": "597c20f536c81d38dc77c628"
      },
      {
        "HOST": "",
        "U_ID": "",
        "PATH": "ProductdetailsPage",
        "REFERER": "ProductlistPage",
        "AGENT": "",
        "OS": "",
        "DATE_TIME": "2017-07-29T05:45:39.047Z",
        "S_ID": "a21c273a-372e-4a81-9997-d468d5efd299",
        "C_ID": "1",
        "C_NAME": "Sparklers",
        "P_ID": "595f3e418c4d19b50ac21b84",
        "P_NAME": "Martina",
        "CART_ID": "",
        "O_ID": "",
        "id": "597c210236c81d38dc77c629"
      },
      {
        "HOST": "",
        "U_ID": "",
        "PATH": "Home",
        "REFERER": "",
        "AGENT": "",
        "OS": "",
        "DATE_TIME": "2017-07-28T05:47:15.604Z",
        "S_ID": "a4278659-8053-45fd-8a95-78766fd7541b",
        "C_ID": "",
        "C_NAME": "",
        "P_ID": "",
        "P_NAME": "",
        "CART_ID": "",
        "O_ID": "",
        "id": "597c216336c81d38dc77c62a"
      },
      {
        "HOST": "",
        "U_ID": "",
        "PATH": "ProductlistPage",
        "REFERER": "Home",
        "AGENT": "",
        "OS": "",
        "DATE_TIME": "2017-07-27T05:47:22.700Z",
        "S_ID": "874bb326-ab02-4061-a029-bef5977d4c65",
        "C_ID": "595f40038c4d19b50ac21b98",
        "C_NAME": "Sparklers",
        "P_ID": "",
        "P_NAME": "",
        "CART_ID": "",
        "O_ID": "",
        "id": "597c216b36c81d38dc77c62b"
      },
      {
        "HOST": "",
        "U_ID": "",
        "PATH": "CartPage",
        "REFERER": "ProductlistPage",
        "AGENT": "",
        "OS": "",
        "DATE_TIME": "2017-07-27T05:47:25.758Z",
        "S_ID": "dd9096f9-79ea-4d86-81ce-149e364ab1ed",
        "C_ID": "1",
        "C_NAME": "Sparklers",
        "P_ID": "",
        "P_NAME": "",
        "CART_ID": "",
        "O_ID": "",
        "id": "597c216d36c81d38dc77c62c"
      },
      {
        "HOST": "",
        "U_ID": "",
        "PATH": "ProductdetailsPage",
        "REFERER": "ProductlistPage",
        "AGENT": "",
        "OS": "",
        "DATE_TIME": "2017-07-29T05:47:42.047Z",
        "S_ID": "4ed84c84-80ec-4494-9ffe-453f19e2c079",
        "C_ID": "1",
        "P_ID": "595f3e418c4d19b50ac21b84",
        "P_NAME": "Martina",
        "CART_ID": "",
        "O_ID": "",
        "id": "597c217d36c81d38dc77c62d"
      },
      {
        "HOST": "",
        "U_ID": "",
        "PATH": "CartPage",
        "REFERER": "ProductdetailsPage",
        "AGENT": "",
        "OS": "",
        "DATE_TIME": "2017-07-29T05:47:45.174Z",
        "S_ID": "91153a97-d79e-4d86-9872-5df51bd7e82f",
        "C_ID": "1",
        "P_ID": "595f3e418c4d19b50ac21b84",
        "P_NAME": "Martina",
        "CART_ID": "",
        "O_ID": "",
        "id": "597c218136c81d38dc77c62e"
      },
      {
        "HOST": "",
        "U_ID": "59687ee6cd62a604e2bb0d1f",
        "PATH": "CustomershippingPage",
        "REFERER": "cartPage",
        "AGENT": "",
        "OS": "",
        "DATE_TIME": "2017-07-29T05:48:20.386Z",
        "S_ID": "46866f41-9f43-4d28-a602-490db68dc029",
        "C_ID": "",
        "C_NAME": "",
        "P_ID": "",
        "P_NAME": "",
        "CART_ID": "597c21a336c81d38dc77c62f",
        "O_ID": "",
        "id": "597c21a436c81d38dc77c630"
      },
      {
        "HOST": "",
        "U_ID": "59687ee6cd62a604e2bb0d1f",
        "PATH": "customerpayment",
        "REFERER": "CustomershippingPage",
        "AGENT": "",
        "OS": "",
        "DATE_TIME": "2017-01-08T05:48:46.356Z",
        "S_ID": "56ad3bd7-854b-42e9-8443-46c514eb2ece",
        "C_ID": "",
        "C_NAME": "",
        "P_ID": "",
        "P_NAME": "",
        "CART_ID": "597c21a336c81d38dc77c62f",
        "O_ID": "",
        "id": "597c21be36c81d38dc77c631"
       }
    ]

var result = arr.reduce((result, date) => {
  var occurances = arr1.filter((obj) => {
    let d = new Date(obj['DATE_TIME']);
    var day = d.getDate();
    var month = d.getMonth() + 1;
    var year = d.getFullYear();

    if(day < 10){
        day='0'+day;
    } 
    if(month<10){
        month='0'+month;
    } 
    var newDate = month+'-'+day+'-'+year;
   
    return date === newDate;
  }).length;
  result[date] = occurances;
  return result;
},{});

console.log(result);

【讨论】:

  • 有点过于复杂了吧?
  • @NinaScholz 你写的代码最优雅,是的,很复杂。
【解决方案2】:

您最初可以遍历 arr 并将其所有日期作为值为 0 的键放入结果中。然后您可以遍历您的 arr1 并将每个日期用作结果对象的键并为每个日期保持递增计数. 像这样:

var arr=[
"08-01-2017",
"07-31-2017",
"07-30-2017",
"07-29-2017",
"07-28-2017",
"07-27-2017",
"07-26-2017"];

var arr1= [
  {
    "HOST": "",
    "U_ID": "",
    "PATH": "Home",
    "REFERER": "",
    "AGENT": "",
    "OS": "",
    "DATE_TIME": "2017-07-31T05:44:06.743Z",
    "S_ID": "80067826-0cad-4806-b40e-8e5d8be18e53",
    "C_ID": "",
    "C_NAME": "",
    "P_ID": "",
    "P_NAME": "",
    "CART_ID": "",
    "O_ID": "",
    "id": "597c20a636c81d38dc77c626"
  },
  {
    "HOST": "",
    "U_ID": "",
    "PATH": "ProductlistPage",
    "REFERER": "Home",
    "AGENT": "",
    "OS": "",
    "DATE_TIME": "2017-07-30T05:44:22.425Z",
    "S_ID": "7fe1795a-5064-43d7-9a62-48b0f156a2c3",
    "C_ID": "1",
    "C_NAME": "Sparklers",
    "P_ID": "",
    "P_NAME": "",
    "CART_ID": "",
    "O_ID": "",
    "id": "597c20b636c81d38dc77c627"
  },
  {
    "HOST": "",
    "U_ID": "",
    "PATH": "ProductlistPage",
    "REFERER": "Home",
    "AGENT": "",
    "OS": "",
    "DATE_TIME": "2017-07-29T05:45:25.064Z",
    "S_ID": "439667fe-ab24-4bf6-959e-152a4f631fe3",
    "C_ID": "595f40038c4d19b50ac21b98",
    "C_NAME": "Sparklers",
    "P_ID": "",
    "P_NAME": "",
    "CART_ID": "",
    "O_ID": "",
    "id": "597c20f536c81d38dc77c628"
  },
  {
    "HOST": "",
    "U_ID": "",
    "PATH": "ProductdetailsPage",
    "REFERER": "ProductlistPage",
    "AGENT": "",
    "OS": "",
    "DATE_TIME": "2017-07-29T05:45:39.047Z",
    "S_ID": "a21c273a-372e-4a81-9997-d468d5efd299",
    "C_ID": "1",
    "C_NAME": "Sparklers",
    "P_ID": "595f3e418c4d19b50ac21b84",
    "P_NAME": "Martina",
    "CART_ID": "",
    "O_ID": "",
    "id": "597c210236c81d38dc77c629"
  },
  {
    "HOST": "",
    "U_ID": "",
    "PATH": "Home",
    "REFERER": "",
    "AGENT": "",
    "OS": "",
    "DATE_TIME": "2017-07-28T05:47:15.604Z",
    "S_ID": "a4278659-8053-45fd-8a95-78766fd7541b",
    "C_ID": "",
    "C_NAME": "",
    "P_ID": "",
    "P_NAME": "",
    "CART_ID": "",
    "O_ID": "",
    "id": "597c216336c81d38dc77c62a"
  },
  {
    "HOST": "",
    "U_ID": "",
    "PATH": "ProductlistPage",
    "REFERER": "Home",
    "AGENT": "",
    "OS": "",
    "DATE_TIME": "2017-07-27T05:47:22.700Z",
    "S_ID": "874bb326-ab02-4061-a029-bef5977d4c65",
    "C_ID": "595f40038c4d19b50ac21b98",
    "C_NAME": "Sparklers",
    "P_ID": "",
    "P_NAME": "",
    "CART_ID": "",
    "O_ID": "",
    "id": "597c216b36c81d38dc77c62b"
  },
  {
    "HOST": "",
    "U_ID": "",
    "PATH": "CartPage",
    "REFERER": "ProductlistPage",
    "AGENT": "",
    "OS": "",
    "DATE_TIME": "2017-07-27T05:47:25.758Z",
    "S_ID": "dd9096f9-79ea-4d86-81ce-149e364ab1ed",
    "C_ID": "1",
    "C_NAME": "Sparklers",
    "P_ID": "",
    "P_NAME": "",
    "CART_ID": "",
    "O_ID": "",
    "id": "597c216d36c81d38dc77c62c"
  },
  {
    "HOST": "",
    "U_ID": "",
    "PATH": "ProductdetailsPage",
    "REFERER": "ProductlistPage",
    "AGENT": "",
    "OS": "",
    "DATE_TIME": "2017-07-29T05:47:42.047Z",
    "S_ID": "4ed84c84-80ec-4494-9ffe-453f19e2c079",
    "C_ID": "1",
    "P_ID": "595f3e418c4d19b50ac21b84",
    "P_NAME": "Martina",
    "CART_ID": "",
    "O_ID": "",
    "id": "597c217d36c81d38dc77c62d"
  },
  {
    "HOST": "",
    "U_ID": "",
    "PATH": "CartPage",
    "REFERER": "ProductdetailsPage",
    "AGENT": "",
    "OS": "",
    "DATE_TIME": "2017-07-29T05:47:45.174Z",
    "S_ID": "91153a97-d79e-4d86-9872-5df51bd7e82f",
    "C_ID": "1",
    "P_ID": "595f3e418c4d19b50ac21b84",
    "P_NAME": "Martina",
    "CART_ID": "",
    "O_ID": "",
    "id": "597c218136c81d38dc77c62e"
  },
  {
    "HOST": "",
    "U_ID": "59687ee6cd62a604e2bb0d1f",
    "PATH": "CustomershippingPage",
    "REFERER": "cartPage",
    "AGENT": "",
    "OS": "",
    "DATE_TIME": "2017-07-29T05:48:20.386Z",
    "S_ID": "46866f41-9f43-4d28-a602-490db68dc029",
    "C_ID": "",
    "C_NAME": "",
    "P_ID": "",
    "P_NAME": "",
    "CART_ID": "597c21a336c81d38dc77c62f",
    "O_ID": "",
    "id": "597c21a436c81d38dc77c630"
  },
  {
    "HOST": "",
    "U_ID": "59687ee6cd62a604e2bb0d1f",
    "PATH": "customerpayment",
    "REFERER": "CustomershippingPage",
    "AGENT": "",
    "OS": "",
    "DATE_TIME": "2017-01-08T05:48:46.356Z",
    "S_ID": "56ad3bd7-854b-42e9-8443-46c514eb2ece",
    "C_ID": "",
    "C_NAME": "",
    "P_ID": "",
    "P_NAME": "",
    "CART_ID": "597c21a336c81d38dc77c62f",
    "O_ID": "",
    "id": "597c21be36c81d38dc77c631"
   }
];

var result = {};


arr.forEach(function(date){
   result[date] = 0;
})


arr1.forEach(function(ob){
    var date = new Date(ob['DATE_TIME']);
    var m = date.getMonth() + 1;
    m = m > 9 ? m : '0' + m;
    var d = date.getDate() + 1;
    d = d > 9 ? d : '0' + d;
    date = m + '-' + d + '-' +  date.getFullYear();
    result[date] = date in result ? parseInt(result[date]) + 1 : 1;
})


console.log(result);

【讨论】:

  • 你在哪里比较 arr1 和 arr?我想你错过了理解他的问题
  • @masterfan 这更有可能是一个想法,现在检查一下,我有更新代码。
【解决方案3】:

您可以将日期标准化为ISO 6801 字符串,就像DATE_TIME 的时间戳一样。然后在以日期为键的对象中添加一个。

var data = [{ DATE_TIME: "2017-07-31T05:44:06.743Z" }, { DATE_TIME: "2017-07-30T05:44:22.425Z" }, { DATE_TIME: "2017-07-29T05:45:25.064Z" }, { DATE_TIME: "2017-07-29T05:45:39.047Z" }, { DATE_TIME: "2017-07-28T05:47:15.604Z" }, { DATE_TIME: "2017-07-27T05:47:22.700Z" }, { DATE_TIME: "2017-07-27T05:47:25.758Z" }, { DATE_TIME: "2017-07-29T05:47:42.047Z" }, { DATE_TIME: "2017-07-29T05:47:45.174Z" }, { DATE_TIME: "2017-07-29T05:48:20.386Z" }, { DATE_TIME: "2017-01-08T05:48:46.356Z" }],
    dates = ["08-01-2017", "07-31-2017", "07-30-2017", "07-29-2017", "07-28-2017", "07-27-2017", "07-26-2017"],
    count = Object.create(null);

dates.forEach(function (d) {
    count[d.replace(/(..)-(..)-(....)/, '$3-$1-$2')] = 0;
});
data.forEach(function (o) {
    var key = o.DATE_TIME.slice(0, 10);
    (key in count) && count[key]++;
});
   
console.log(count);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

    【解决方案4】:

    假设日期部分具有固定数量的字符似乎是安全的。因此:

    arr1.reduce((acc, item) => {
      const key = item.DATE_TIME.substr(0,10);
      if (arr.hasOwnProperty(key)) { acc[key] = (acc[key] || 0) + 1 }
      return acc;
    }, {})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多