【问题标题】:Concatenate object's properties of variable length of a JavaScript object into a new property of the object将 JavaScript 对象的可变长度的对象属性连接到对象的新属性中
【发布时间】:2018-04-26 13:06:38
【问题描述】:

我有这个复杂的对象结构:

myObject = {
    "myObject" : [
        {
            "id" : 1,
            "parameters" : [
                {
                    "name" : "name1",
                    "special" : "xxx"
                },
                {
                    "name" : "name2",
                    "special" : "yyy"           
                }
            ]
        },
        {
            "id" : 2,
            "parameters" : [
                {
                    "name" : "name3",
                    "special" : "zzz"
                }
            ]
        },
        {
            "id" : 2,
            "parameters" : [
                {
                    "name" : "name4",
                    "special" : "ttt"
                },
                {
                    "name" : "name5",
                    "special" : "aaa"
                },
                {
                    "name" : "name6",
                    "special" : "zzz"
                }
            ]
        },
        ...
    ]
};

它由一组其他对象组成,每个对象都有一个可变编号parameters

我的目标是将每个对象的specialparameters 连接成一个新字符串,该字符串必须作为它的新属性存储。

在这种情况下,结果应如下所示:

myObject = {
    "myObject" : [
        {
            "id" : 1,
            "parameters" : [
                {
                    "name" : "name1",
                    "special" : "xxx"
                },
                {
                    "name" : "name2",
                    "special" : "yyy"           
                }
            ],
            "newProp" : "xxxyyy"
        },
        {
            "id" : 2,
            "parameters" : [
                {
                    "name" : "name3",
                    "special" : "zzz"
                }
            ],
            "newProp" : "zzz"
        },
        {
            "id" : 2,
            "parameters" : [
                {
                    "name" : "name4",
                    "special" : "ttt"
                },
                {
                    "name" : "name5",
                    "special" : "aaa"
                },
                {
                    "name" : "name6",
                    "special" : "zzz"
                }
            ],
            "newProp" : "tttaaazzz"
        },
        ...
    ]
};

我尝试过这样的事情:

forEach(arr in myObject.myObject){
    arr.parameters(forEach (i in arr.parameters.special) {
    myObject.myObject = i.concat(myObject.myObject);
  })
}

显然,它不起作用。但我想这可能是正确的方法。

有什么建议吗?

【问题讨论】:

    标签: javascript arrays object


    【解决方案1】:

    您可以使用Array#forEach 遍历对象,然后使用Array#mapArray#join 根据参数值构造字符串,如下所示:

    const myObject = {"myObject":[{"id":1,"parameters":[{"name":"name1","special":"xxx"},{"name":"name2","special":"yyy"}]},{"id":2,"parameters":[{"name":"name3","special":"zzz"}]},{"id":2,"parameters":[{"name":"name4","special":"ttt"},{"name":"name5","special":"aaa"},{"name":"name6","special":"zzz"}]}]};
    
    myObject.myObject.forEach(item => {
      item.newProp = item.parameters.map(p => p.special).join('');
    });
    
    console.log(myObject);

    【讨论】:

      【解决方案2】:

      对每个使用 reduce 和

      var myObject = {
          "myObject" : [
              {
                  "id" : 1,
                  "parameters" : [
                      {
                          "name" : "name1",
                          "special" : "xxx"
                      },
                      {
                          "name" : "name2",
                          "special" : "yyy"           
                      }
                  ]
              },
              {
                  "id" : 2,
                  "parameters" : [
                      {
                          "name" : "name3",
                          "special" : "zzz"
                      }
                  ]
              },
              {
                  "id" : 2,
                  "parameters" : [
                      {
                          "name" : "name4",
                          "special" : "ttt"
                      },
                      {
                          "name" : "name5",
                          "special" : "aaa"
                      },
                      {
                          "name" : "name6",
                          "special" : "zzz"
                      }
                  ]
              }
          ]
      };
      
      myObject.myObject.forEach(arr => {
       arr.prop = arr.parameters.reduce((res,obj)=> res+obj.special, '')
      })
      
      console.log(myObject)

      【讨论】:

        【解决方案3】:

        您可以像这样使用.map().reduce()

        let myObject = [{"id" : 1, "parameters" : [{ "name" : "name1", "special" : "xxx"}, { "name" : "name2", "special" : "yyy" }]}, { "id" : 2, "parameters" : [{ "name" : "name3", "special" : "zzz"}]}, {"id" : 2, "parameters" : [{ "name" : "name4", "special" : "ttt"}, { "name" : "name5", "special" : "aaa"},{ "name" : "name6", "special" : "zzz"}]}];
        
        let result = myObject.map(
          o => (o.newProp = o['parameters'].reduce((a, o) => a + o['special'], ""), o)
        );
        
        console.log(result);
        .as-console-wrapper { max-height: 100% !important; top: 0; }

        【讨论】:

          【解决方案4】:

          另一种方法是使用嵌套的地图函数:

          myObject = {"myObject":[{"id":1,"parameters":[{"name":"name1","special":"xxx"},{"name":"name2","special":"yyy"}]},{"id":2,"parameters":[{"name":"name3","special":"zzz"}]},{"id":2,"parameters":[{"name":"name4","special":"ttt"},{"name":"name5","special":"aaa"},{"name":"name6","special":"zzz"}]}]};
          
          myObject.myObject.map(x => {
            x.newProp = x.parameters.map(p => p.special).join('');
            return x;
          })
          
          console.log(myObject);

          【讨论】:

            猜你喜欢
            • 2018-10-07
            • 2017-02-05
            • 1970-01-01
            • 2016-07-18
            • 2015-11-15
            • 1970-01-01
            • 2015-12-02
            • 2012-03-16
            • 2016-07-13
            相关资源
            最近更新 更多