【问题标题】:How to insert each array item into each object of other array?如何将每个数组项插入到其他数组的每个对象中?
【发布时间】:2022-01-06 13:40:49
【问题描述】:

我有 2 个数组

我想要这个:

[{name: 'Sweater', qty: 1}, {name: 'Skirt', qty: 3}, {name: 'Socks', qty: 2}]

但我明白了

    qtyList = [1, 3, 2]
    data = [{name: 'Sweater', qty: 1}, {name: 'Skirt', qty: 1}, {name: 'Socks', qty: 1}]

    let assignQty = data.map((x, id) => {
            qtyList.map((y, idx) => {
                if (idx == id) return x.qty = y
            })
        })
        console.log('assignQty', assignQty)

【问题讨论】:

    标签: javascript json


    【解决方案1】:

    您实际上是将 2 个列表压缩在一起 - 通常按如下方式完成:

    const qtyList = [1, 3, 2]
    const data = [{name: 'Sweater', qty: 1}, {name: 'Skirt', qty: 1}, {name: 'Socks', qty: 1}]
    
    const result = data.map((item,idx) => ({...item, qty: qtyList[idx]}))
    
    console.log(result);

    【讨论】:

      【解决方案2】:

      const qtyList = [1, 3, 2];
      
      
      data = [{name: 'Sweater', qty: 1}, {name: 'Skirt', qty: 1}, {name: 'Socks', qty: 1}]
      
      
      
      const updateQuantity = (list, data) => {
        if (data.length !== list.length) {
          return
        }
      
      
        for (let index = 0; index < list.length; index++) {
          const element = list[index];
      
          // udpate data
          data[index] = {
            name: data[index].name,
            qty: element
          }
        }
       
      
        return data;
      
      }
      
      
      console.log(updateQuantity(qtyList, data));

      【讨论】:

        【解决方案3】:

        item 上使用Spread syntax,而不是用数组值更改qty

        qtyList = [1, 3, 2]
        
        data = [{name: 'Sweater', qty: 1}, {name: 'Skirt', qty: 1}, {name: 'Socks', qty: 1}]
        
        let assignQty = data.map((item, index) => (
                         {
                           ...item,
                           qty: qtyList[index]}
                        ));
        
        console.log("assignQty", assignQty );

        【讨论】:

          【解决方案4】:

          不使用扩展运算符,更新必填字段,然后返回x

              qtyList = [1, 3, 2]
              data = [{name: 'Sweater', qty: 1}, {name: 'Skirt', qty: 1}, {name: 'Socks', qty: 1}]
          
              var assignQty = data.map((x, id) => {x.qty=qtyList[id];return x;})
          
              console.log('assignQty', assignQty)

          【讨论】:

            【解决方案5】:

            这是我对您问题的回答。在您的示例中,您试图将两个数组映射为一个。这种方法“循环”包含要更改的对象的数据数组。

            使用每个对象的索引将item.qty 设置为qtyList[index] 中的值。

                qtyList = [1, 3, 2];
                data = [{
                  name: 'Sweater',
                  qty: 1
                }, {
                  name: 'Skirt',
                  qty: 1
                }, {
                  name: 'Socks',
                  qty: 1
                }];
            
                let assignQty = data.map((item, index) => {
                  item.qty = qtyList[index];
                  return item;
                });
                console.log(assignQty)

            【讨论】:

              猜你喜欢
              • 2017-07-29
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2022-08-24
              • 2019-01-19
              相关资源
              最近更新 更多