如何提取值并创建一个新对象,如下所示

我拥有的对象如下:


const tagA = {

  color: ['red', 'green'],

  type: { a: 10, b:7}...

};

const tagB = {

  color: ['blue', 'red'],

  type: { b:54, z:10} .... 

};

const tagC = {

  color: ['red', 'green', 'yellow'],

  type: { a: 13, b:17}...

};

我希望能够创建一个如下所示的新对象:


const colorFilter = {

   red: ['tagA', 'tagC'],

   green: ['tagA', 'tagC'],

   blue: ['tagB'],

   yellow: ['tagC']

};


明月笑刀无情
浏览 78回答 3
3回答

汪汪一只猫

const tagA = {color: ['red', 'green'],type: {a: 10,b: 7}}const tagB = {color: ['blue', 'red'],type: {b: 54,z: 10}}const tagC = {color: ['red', 'green', 'yellow'],type: {a: 13,b: 17}}const tags = [tagA,tagB,tagC]let colors = []tags.forEach(t=>t.color.forEach(c=>colors.push(c)))colors = colors.filter((c,i)=>colors.indexOf(c)===i)let Color = {}colors.forEach(c=>Color[c]=tags.filter(t=>t.color.includes(c)))console.log(Color)

森林海

你可以有像下面这样的功能getColorFilter。详细了解Object.entries(), flatMap& reduce。注意您需要传递object为getColorFilter({ tagA, tagB, tagC });. 或者您可以创建新对象let obj = { tagA, tagB, tagC };,例如getColorFilter(obj);function getColorFilter(tags) {  return Object.entries(tags)    .flatMap(([key, val]) => val.color.map(c => ({ tag: key, color: c })))    .reduce((acc, x) => {      acc[x.color] = acc[x.color] || [];      acc[x.color].push(x.tag);      return acc;    }, {})}const tagA = {  color: ['red', 'green']};const tagB = {  color: ['blue', 'red']};const tagC = {  color: ['red', 'green', 'yellow']};const colorFilter = getColorFilter({ tagA, tagB, tagC });console.log(colorFilter);

慕尼黑的夜晚无繁华

const tagA = {  color: ['red', 'green'],  type: {    a: 10,    b: 7  }};const tagB = {  color: ['blue', 'red'],  type: {    b: 54,    z: 10  }};const tagC = {  color: ['red', 'green', 'yellow'],  type: {    a: 13,    b: 17  }};const tags = {  tagA: tagA,  tagB: tagB,  tagC: tagC};let tagsTest = Object.keys(tags);let colorFilter = {};tagsTest.forEach(t => {  tags[t].color.forEach(l => {    if (colorFilter.hasOwnProperty(l)) {      colorFilter[l].push(t);      }    else {        colorFilter[l] = [t];        }    }  )});console.log(colorFilter);    const tagA = {      color: ['red', 'green'],      type: {        a: 10,        b: 7      }    };    const tagB = {      color: ['blue', 'red'],      type: {        b: 54,        z: 10      }    };    const tagC = {      color: ['red', 'green', 'yellow'],      type: {        a: 13,        b: 17      }    };    const tags = {      tagA: tagA,      tagB: tagB,      tagC: tagC    };    let tagsTest = Object.keys(tags);    let colorFilter = {};    tagsTest.forEach(t => {      tags[t].color.forEach(l => {        if (colorFilter.hasOwnProperty(l)) {          colorFilter[l].push(t);          }        else {            colorFilter[l] = [t];            }        }      )    });    console.log(colorFilter); Run code snippetHide resultsExpand snippet我想我能够通过上述方法解决它。如果有更简单的方法请告诉我。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript