【问题标题】:how can I group array of values inside of an object to another array of object如何将对象内的值数组分组到另一个对象数组
【发布时间】:2019-07-29 21:44:11
【问题描述】:

我有一个包含值数组的对象


{firstName: ['John', 'Mike']}, lastName: ['Doe', 'Smith']},


现在我有一个带有数组的空对象


const newData = {} newData.ppl = []


我怎样才能在 ppl 数组中得到这个结果,例如:ppl = [{firstName: 'John', lastName: 'Doe'}, {firstName: 'Mike', lastName: 'Smith'}]

【问题讨论】:

    标签: javascript arrays json reactjs ecmascript-6


    【解决方案1】:

    您可以像这样使用Array.reduce()Object.values()Object.entries() 来做到这一点:

    const data = { firstName: ['John', 'Mike'], lastName: ['Doe', 'Smith'] };
    
    const ppl = Object.entries(data).reduce((acc, [key, arr]) => {
      arr.forEach((v, i) => (acc[i] = (acc[i] || {}))[key] = v);
      return acc;
    }, {});
    
    const newData = { ppl: Object.values(ppl) };
    
    console.log(newData);

    【讨论】:

      【解决方案2】:

      使用Object.entriesreduceforEach 快速实现:

      const srcData = {
        firstName: ['John', 'Mike'],
        lastName: ['Doe', 'Smith']
      };
      
      const ppl = Object
        .entries(srcData)
        .reduce((acc, [key, values]) => {
          values.forEach((val, i) => {
            if (i >= acc.length) {
              acc.push({});
            }
            acc[i][key] = val;
          });
          return acc;
        }, []);
      
      console.log(ppl);

      解释:

      1. 使用Object.entries 将对象转换为键值对数组。
      2. 使用.reduce 迭代构建结果数组。
      3. 使用 .forEach 循环从 (1) 获得的值数组,如果结果数组的长度不足以容纳当前数组中的所有项,则将一个空对象推送到数组 (push({}))价值观

      【讨论】:

        【解决方案3】:

        使用地图。

        let master = {firstName: ['John', 'Mike'], lastName: ['Doe', 'Smith']}
        
        const newData = {};
        newData.ppl = master.firstName.map((f,i) => {
          return {firstName: f, lastName: master.lastName[i]};
        });
        
        console.log(newData.ppl);

        【讨论】:

          【解决方案4】:

          您可以获取条目并将属性分配给与数组值相同的索引。

          这适用于任意数量的属性。

          var data = { firstName: ['John', 'Mike'], lastName: ['Doe', 'Smith'] },
              result = Object
                  .entries(data)
                  .reduce((r, [k, a]) => (a.forEach((v, i) => (r[i] = r[i] || {})[k] = v), r), []);
          
          console.log(result);
          .as-console-wrapper { max-height: 100% !important; top: 0; }

          【讨论】:

            【解决方案5】:

            Array.forEach() 迭代firstName,并取名字。使用索引从lastName 数组中获取相应的姓氏。将具有名字和姓氏的新对象推送到ppl 数组。

            const data = {firstName: ['John', 'Mike'], lastName: ['Doe', 'Smith']};
            
            const newData = { ppl: [] };
            
            data.firstName.forEach((firstName, i) => 
              newData.ppl.push({ 
                firstName, 
                lastName: data.lastName[i] 
              })
            );
            
            console.log(newData);

            【讨论】:

              猜你喜欢
              • 2017-01-15
              • 2021-12-25
              • 1970-01-01
              • 2020-02-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多