【问题标题】:How to merge two Objects using javascript?如何使用javascript合并两个对象?
【发布时间】:2019-01-14 13:47:04
【问题描述】:
a = {
    coffee: 'Coffees',
    mango: '10 Mangos',
    shoe: '2 Shoes',
    bag: '5 Bags',
    abc: 'D E F'
}

b = {
    coffee,
    abc,
    bag,
}


mergerd_output_will_be = {
    coffee: 'Coffees',
    abc: 'D E F',
    bag: '5 Bags'
}

我怎样才能像这样合并“a”对象? 'b' 对象键将仅包含在输出对象中。

【问题讨论】:

标签: javascript lodash


【解决方案1】:

您可以使用Array.reduce 并使用每个键值构造一个对象。

    let a = {
        coffee: 'Coffees',
        mango: '10 Mangos',
        shoe: '2 Shoes',
        bag: '5 Bags',
        abc: 'D E F'
    }
    let b = {'coffee':null, 'abc':null, 'bag':null};
    let c = Object.keys(b).reduce((current,key)=>({...current, [key]:a[key]}), {});
    console.log(c);

【讨论】:

  • 如何使用javascript合并两个对象?
  • @kemicofa 第二个对象是什么,它的值是什么?那我该怎么回答呢?
  • 刚刚投票太酷了,但我是速记的忠实粉丝(即使只是语法糖),那么:let c = Object.keys(b).reduce((current, key) => ({ ...current, [key]: a[key] }), {});
  • @quirimmo 啊,我试图弄清楚这一点。谢谢。
【解决方案2】:

你_.pick()来自对象a对象_.keys()的b:

const a = {
  coffee: 'Coffees',
  mango: '10 Mangos',
  shoe: '2 Shoes',
  bag: '5 Bags',
  abc: 'D E F'
}

const b = {
  coffee: null,
  abc: null,
  bag: null
}

const result = _.pick(a, _.keys(b))

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

【讨论】:

    【解决方案3】:

    您提供的初始代码无效(变量 b)

    你可以做这样的事情:

    
    const a = {
        coffee: 'Coffees',
        mango: '10 Mangos',
        shoe: '2 Shoes',
        bag: '5 Bags',
        abc: 'D E F'
    }
    
    const props = ['coffee', 'abc', 'bag'];
    
    const mergerd_output_will_be = {};
    props.forEach(propName => mergerd_output_will_be[propName] = a[propName]);
    

    或

    const a = {
        coffee: 'Coffees',
        mango: '10 Mangos',
        shoe: '2 Shoes',
        bag: '5 Bags',
        abc: 'D E F'
    }
    
    const b = {coffee: null, abc: null, bag: null};
    
    const mergerd_output_will_be = {...b};
    Object.keys(mergerd_output_will_be).forEach(propName => 
      mergerd_output_will_be[propName]=a[propName]
    )
    

    【讨论】:

      【解决方案4】:

      基本上你有两种方法,使用... spread operator 或Object.assign()

      const coffee = 'Coffees'
      const abc = 'abc';
      const bag = 'bag'
      
      const a = {
        coffee: 'Coffees',
        mango: '10 Mangos',
        shoe: '2 Shoes',
        bag: '5 Bags',
        abc: 'D E F'
      }
      
      const b = {
        coffee,
        abc,
        bag,
      }
      
      const result1 = {...a, ...b};
      const result2 = Object.assign({}, a, b)
      
      console.log(result1)
      console.log(result2)

      【讨论】:

      • 答案似乎不正确,因为 OP 想要 2 个对象的交集而不是联合。描述中的merged_object 只包含公共字段。您的答案将合并两个对象。
      • @HussainAliAkbar 完全正确,我没有正确理解 OP 的问题,我什至赞成这个答案。现在我什至无法删除我的赞成票 -.- 顺便说一下,标题不清楚,因为“合并”两个对象意味着这个答案所说的
      • 是的,你说得对,标题不清楚。 OP 想要的是 2 个对象的交集,而不是“合并”。
      【解决方案5】:

      首先,一个Object里面应该是Key-value Pairs,为此你可以把b改成数组,比如b = ['coffee', 'D E F', '5 Bags']

      然后,使用下面的代码产生预期的输出。

      let a = {
        coffee: 'Coffees',
        mango: '10 Mangos',
        shoe: '2 Shoes',
        bag: '5 Bags',
        abc: 'D E F'
       };
       let b = ['coffee', 'abc', 'bag'];
      let output = {};
      for( let i = 0; i < b.length; i++) {
       output[b[i]] = a[b[i]];
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-30
        • 2018-06-25
        • 1970-01-01
        • 2019-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多