【问题标题】:count occurrences of items in an array from an nested items in an array of objects javascript从对象数组中的嵌套项计算数组中项的出现次数javascript
【发布时间】:2021-09-21 03:26:42
【问题描述】:

我有这个日期数组。

const dateArray = ["7/12/2021","7/13/2021","7/14/2021","7/15/2021"]

我正在尝试查看这些日期中是否有任何日期出现在我的其他对象数组中,这些日期将与对象中的某些内容匹配。

const data = [ 
      [ { id: 1, date: "7/13/2021" }, { id:2, date: "7/15/2021" } ],
      [ { id: 1, date: "7/14/2021" }, { id:2, date: "7/15/2021" } ],
]

因此,如果日期不匹配,我想为该日期返回 0。像这样的

const result = [
     [0, 1, 0, 1],
     [0, 0, 1, 1]
]

我试过这样的.....

var getResult = (dateArray, data) => {
    const result = []
    let index = 0;
    for (let i = 0; i < dateArray.length; i++) {
        for (let j = 0; j < data.length; j++) {
            let count = 0
            if (dateArray[i] === data[j][index].date) {
                count++
                index++
                if (index === data[i].length) {
                    return
                }
            }
            result.push(count)
        }
    }
    console.log(result)
}

但它当然不起作用.... 感谢您的帮助!

【问题讨论】:

  • 结果是示例data 的预期输出吗?你能解释一下吗
  • 所以要清楚这一点,首先检查数据数组中的日期是否存在于dateArray数组中,如果存在则在结果数组中写入1,如果不存在则在结果数组中写入0结果数组?
  • 是的,结果是预期的输出,它应该从数据中的 dateArray 中计算日期的出现次数,对不起,我不清楚,但这可能吗?

标签: javascript arrays algorithm object find-occurrences


【解决方案1】:

const 
  dateArray = ["7/12/2021","7/13/2021","7/14/2021","7/15/2021"],
  data = [ 
    [ { id: 1, date: "7/13/2021" }, { id:2, date: "7/15/2021" } ],
    [ { id: 1, date: "7/14/2021" }, { id:2, date: "7/15/2021" } ],
  ];

// iterate over data
const result = data.map(arr => {
  // get occurences count of current array dates
  const occurences = arr.reduce((map, {date}) => 
    map.set(date, (map.get(data) || 0) + 1)
  , new Map);
  // return list of occurences for dateArray elements
  return dateArray.map(date => occurences.get(date) || 0);
}, []);

console.log(result);

【讨论】:

    【解决方案2】:

    你可以这样做

    const dateArray = ["7/12/2021", "7/13/2021", "7/14/2021", "7/15/2021"];
    
    const data = [
      [{
        id: 1,
        date: "7/13/2021"
      }, {
        id: 2,
        date: "7/15/2021"
      }],
      [{
        id: 1,
        date: "7/14/2021"
      }, {
        id: 2,
        date: "7/15/2021"
      }],
    ];
    
    const result = data.map(item => {
    
      const resArr = (new Array(dateArray.length)).fill(0);
      item.forEach(entity => {
        const index = dateArray.findIndex(dateItem => dateItem == entity.date);
        if (index >= 0) {
          resArr[index]++;
        }
      });
      return resArr;
    });
    
    console.log(result);

    【讨论】:

    • 对不起,``` (new Array(dateArray.length)).fill(0); ```怎么办?并感谢您的快速回答!
    • 这会创建一个长度为dateArray 的数组并用0 填充它。即,假设 dateArray 的长度为 4,它会创建这个数组 [0, 0, 0, 0]
    猜你喜欢
    • 2020-03-10
    • 2014-03-18
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 2014-10-16
    • 2020-01-20
    • 1970-01-01
    • 2021-08-23
    相关资源
    最近更新 更多