代码之家  ›  专栏  ›  技术社区  ›  Morton

如何将多个数组变成带对象的数组?

  •  0
  • Morton  · 技术社区  · 2 年前

    我试着使用 forEach 和 push 一个新的数组来实现它,但结果是错误的。

    const dummyArray = [
      [45292, 1, 2],
      [46292, 5, 6],
      [47292, 9, 10],
    ]
    
    const resultArray: any[] = []
    
    dummyArray.forEach((elementValue, index) => {
      resultArray.push({ date: '', price: '', code: '' })
    
      elementValue.forEach(value => {
        if (index === 0) {
          resultArray[index] = { ...resultArray[index], date: value }
        }
        if (index === 1) {
          resultArray[index] = { ...resultArray[index], price: value }
        }
        if (index === 2) {
          resultArray[index] = { ...resultArray[index], code: value }
        }
      })
    })
    
    console.log('resultArray', resultArray)
    

    结果变成

    [
      { date: 2, price: '', code: ''},
      { date: '', price: 6, code: ''},
      { date: '', price: '', code: 10},
    ]
    

    我希望它变得像

    [
      { date: 45292, price: 1, code: 2},
      { date: 46292, price: 5, code: 6},
      { date: 47292, price: 9, code: 10},
    ]
    

    我该如何实现它?

    3 回复  |  直到 2 年前
        1
  •  4
  •   Jaromanda X    2 年前

    到目前为止,最简单的方法是使用这一行——只需将dummyArray项映射到一个对象

    它还使用现代模式,如析构函数和对象简写

    const dummyArray = [
      [45292, 1, 2],
      [46292, 5, 6],
      [47292, 9, 10],
    ]
    const result = dummyArray.map(([date, price, code]) => ({date, price, code}))
    console.log(result);
        2
  •  1
  •   Iman Maleki    2 年前

    if条件(subIndex)需要一个不同的索引:

    dummyArray.forEach((elementValue, index) => {
      resultArray.push({ date: "", price: "", code: "" });
    
      elementValue.forEach((value, subIndex) => {
        if (subIndex === 0) {
          resultArray[index] = { ...resultArray[index], date: value };
        }
        if (subIndex === 1) {
          resultArray[index] = { ...resultArray[index], price: value };
        }
        if (subIndex === 2) {
          resultArray[index] = { ...resultArray[index], code: value };
        }
      });
    });
    

    您也可以执行以下操作。

    const keyArray = ["date", "price", "code"];
    
    dummyArray.forEach((elementValue, index) => {
      elementValue.forEach((value, subIndex) => {
        resultArray[index] = { ...resultArray[index], [keyArray[subIndex]]: value };
      });
    });
    

    或

    const dummyArray = [
      [45292, 1, 2],
      [46292, 5, 6],
      [47292, 9, 10],
    ];
    const keyArray = ["date", "price", "code"];
    
    const resultArray = dummyArray.map((elementValue) =>
      elementValue.reduce((acc, value, subIndex) => {
        return { ...acc, [keyArray[subIndex]]: value };
      }, {})
    );
    
    console.log("resultArray", resultArray);
    

    请注意,使用reduce时应在reduce内部附带一个return。

        3
  •  1
  •   digitalniweb    2 年前

        const dummyArray = [
          [45292, 1, 2],
          [46292, 5, 6],
          [47292, 9],
        ]
        
        const resultArray = []
        
        dummyArray.forEach((elementValue, index) => {
          resultArray.push({ date: elementValue[0]??'', price: elementValue[1]??'', code: elementValue[2]??'' })
        })
        console.log(resultArray)