从两个数组之间的匹配对象复制属性值

时间:2017-05-05 15:51:28

标签: javascript arrays javascript-objects

我正在使用Angular 2 / Typescript。

我有一个" Items":

的数组
items: [
  {
    "id": 1,
    "qty" undefined
  },
  {
    "id": 2,
    "qty" undefined
  } 
  {
    "id": 3,
    "qty" undefined
  }...etc
]

然后我有一个" ItemsWithQuantities":

的数组
 itemsWithQuantities: [
      {
        "id": 1,
        "qty" 55
      },
      {
        "id": 2,
        "qty" 3
      } ...etc
    ]

我想将itemsWithQuantities数组中的qty值放入id数组中匹配(items)对象的qty属性中。显然我可以创建一个循环和嵌套循环来查找匹配并设置属性值,但我对重构/口才解决方案更感兴趣。我想知道打字稿/" new"是否内置了一些东西。 JS风味甚至lodash可以让我得到我想要的东西。

2 个答案:

答案 0 :(得分:1)

您可以使用lodash merge

    var items = [
      {
        "id": 1,
        "qty": undefined
      },
      {
        "id": 2,
        "qty": undefined
      },
      {
        "id": 3,
        "qty": undefined
      }
    ];
    
    var itemsWithQuantities = [
          {
            "id": 1,
            "qty": 55
          },
          {
            "id": 2,
            "qty": 3
          },
          {
          	"id": 3,
            "qty": 24
          }
    ];
        
    var answer = _.merge(itemsWithQuantities, items);
    console.log(answer);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.5.1/lodash.min.js"></script>

jsfiddle

答案 1 :(得分:0)

如果您确实不能将一个数组分配给另一个数组,那么您可以使用内置的.map.find方法。

下面的示例(虽然在一天结束时,在内部,它仍在执行您提到的循环):

 const res = items
    .map(item =>  Object.assign({}, item,{qty:(itemsWithQuantities.find(iwq => iwq.id === item.id) || {qty:0}).qty}));