为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

明月笑刀无情 2022-12-22 14:29:14
我拥有的对象如下: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']};
查看完整描述

3 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

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)


查看完整回答
反对 回复 2022-12-22
?
森林海

TA贡献2011条经验 获得超2个赞

你可以有像下面这样的功能getColorFilter。详细了解Object.entries()flatMapreduce

注意您需要传递objectgetColorFilter({ 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);


查看完整回答
反对 回复 2022-12-22
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

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



我想我能够通过上述方法解决它。如果有更简单的方法请告诉我。


查看完整回答
反对 回复 2022-12-22
  • 3 回答
  • 0 关注
  • 62 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信