首页 > 解决方案 > 将对象分组到具有不同标签的数组中

问题描述

    {
  '1512': {
    title: 'title1',
  },
  '1513': {
    title: 'title2',
  },
  '1514': {
    title: 'title3',
  },
  '1515': {
    title: 'title4',
  },
  '1516': {
    title: 'title5',
  },
  '1517': {
    title: 'title6',
  },
  '1518': {
    title: 'title7',
  },
}

我得到了上面的对象,我想做的是从中创建一个新数组。

例如,我想检查对象,如果 title === 'title1' 和 'title5' 推送类似 'title15 combined' <--- 不是很重要,但作为一个例子。然后再做一次检查,如果 title === 'title2' and 'title3' 它会将另一个项目推送到新数组中。

我得到了以下代码,但我希望它添加一项而不是两项,或者有多少条件匹配

const data = {
  '1512': {
    title: 'title1',
  },
  '1513': {
    title: 'title2',
  },
  '1514': {
    title: 'title3',
  },
  '1515': {
    title: 'title4',
  },
  '1516': {
    title: 'title5',
  },
  '1517': {
    title: 'title6',
  },
  '1518': {
    title: 'title7',
  },
}

let array = []
for (const [key, value] of Object.entries(data)) {
  if (value.title === 'title1' || value.title === 'title2') {
    array.push('first')
  } else if (value.title === 'title3' || value.title === 'title4') {
    array.push('second')
  }
}

console.log(array)
.as-console-wrapper { max-height: 100% !important; top: 0; }

所以不是输出第一,第一,第二,第二我想要第一,第二 - 我觉得代码也不是最佳的,但是哈 - 让我专注于让实现正确

标签: javascriptobject

解决方案


将先前的值存储在变量中,然后使用if语句执行检查:

const data = {
  '1512': {
    title: 'title1',
  },
  '1513': {
    title: 'title2',
  },
  '1514': {
    title: 'title3',
  },
  '1515': {
    title: 'title4',
  },
  '1516': {
    title: 'title5',
  },
  '1517': {
    title: 'title6',
  },
  '1518': {
    title: 'title7',
  },
}

let array = [];
let last;
for (const [key, value] of Object.entries(data)) {
  if (value.title === 'title1' || value.title === 'title2') {
    if (last != 'first') {
      array.push('first')
      last = 'first';
    }
  } else if (value.title === 'title3' || value.title === 'title4') {
    if (last != 'second') {
      array.push('second')
      last = 'second';
    }
  }
}

console.log(array)
.as-console-wrapper {
  max-height: 100% !important;
  top: 0;
}

或者读取数组中的最后一个元素:

const data = {
  '1512': {
    title: 'title1',
  },
  '1513': {
    title: 'title2',
  },
  '1514': {
    title: 'title3',
  },
  '1515': {
    title: 'title4',
  },
  '1516': {
    title: 'title5',
  },
  '1517': {
    title: 'title6',
  },
  '1518': {
    title: 'title7',
  },
}

let array = [];
for (const [key, value] of Object.entries(data)) {
  let prev = array[array.length-1];
  if (value.title === 'title1' || value.title === 'title2') {
    if (prev != 'first') {
      array.push('first')
    }
  } else if (value.title === 'title3' || value.title === 'title4') {
    if (prev != 'second') {
      array.push('second')
    }
  }
}

console.log(array)
.as-console-wrapper {
  max-height: 100% !important;
  top: 0;
}


推荐阅读