微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从对象数组中的嵌套项目中计算数组中项目的出现次数javascript

如何解决从对象数组中的嵌套项目中计算数组中项目的出现次数javascript

我有这个日期数组。

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" },]

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

const result = [
     [0,1,1],[0,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)
}

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

解决方法

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" },];

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

,

你可以这样做

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

const data = [
  [{
    id: 1,date: "7/13/2021"
  },{
    id: 2,date: "7/15/2021"
  }],[{
    id: 1,date: "7/14/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);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。