将对象数组转换为单个对象

时间:2017-06-15 06:23:44

标签: javascript typescript

有一个包含no的json的数组。

[{linkValue:"value1"},{linkValue:"value2"},{linkValue:"value3"},{linkValue:"value4"},{linkValue:"value5"}]

请注意,每个Json都有相同的密钥。我想将此数组转换为单个json,如

{linkValue1:"value1",linkValue2:"value2",linkValue3:"value3",linkValue4:"value4",linkValue5:"value5"}

我还需要知道一件事。我的数组也在json中,我怎么从json那里得到这个arry?

我最初的json是

{name:"value",age:"value",linkValue:[[{linkValue:"value1"},{linkValue:"value2"},{linkValue:"value3"},{linkValue:"value4"},{linkValue:"value5"}]
]}

我正在表达我最后的json样子:

{name:"value",age:"value",linkValue1:"value1",linkValue2:"value2",linkValue3:"value3",linkValue4:"value4",linkValue5:"value5"}

任何人都可以帮助我

5 个答案:

答案 0 :(得分:1)

使用Array.forEach并向空对象添加属性:

        String s1 = "Isabella,tom,hardy";
        String s2 = "Isabella,tom,hardy,victor,smith";
        Set<String> result = new TreeSet<String>();
        result.addAll(Arrays.asList(s1.split((","))));
        result.addAll(Arrays.asList(s2.split((","))));
        System.out.println(result);

答案 1 :(得分:0)

[{linkValue:"value1"},{linkValue:"value2"},{linkValue:"value3"},{linkValue:"value4"},{linkValue:"value5"}]

这是javascript数组包含多个javascript对象。

{linkValue1:"value1",linkValue2:"value2",linkValue3:"value3",linkValue4:"value4",linkValue5:"value5"}

如果您需要这样的结构,那么定义一个javascript对象并添加linkvalue1,linkvalue2等作为该对象的成员,然后将其添加到javascript数组。

答案 2 :(得分:0)

使用reduce

的解决方案
// HELPER FUNCTIONS

// pick properties from object with default value
function pick (props, sourceObj, defaultValue) {
  return props.reduce(
    (obj, prop) =>
      Object.assign(obj, { [prop]: sourceObj[prop] || defaultValue }),
    {}
  )
}

// get property value or default
function propOr (propName, obj, defaultValue) {
  return obj[propName] || defaultValue
}

// flatten nested array
function flattern (nestedArray) {
  return nestedArray.reduce((flat, innerArray) => flat.concat(innerArray), [])
}

// LINKS BUILDER based on REDUCE
function buildLinks (linksArray) {
  return linksArray.reduce((accumulator, item, index) => {
    accumulator['linkValue' + (index + 1)] = item.linkValue
    return accumulator
  }, {})
}


// TRANSFORMATION FUNCTION - takes json and produce required output
function transform(json) {
  return Object.assign(
    {}, 
    pick(['name', 'age'], json, null), 
    buildLinks(flattern(propOr('linkValue', json, [])))
  )
}

// EXECUTION
const result = transform(source)

PS&GT;您可以使用Lodash或Ramda等库,并将我定义的辅助函数替换为库

中的函数

答案 3 :(得分:0)

使用reduce API,

let targetObj = srcArr.reduce((accumulator, value, index)=>{
   accumulator['linkValue'+(index+1)] = value.linkValue;
   return accumulator;
}, {});

答案 4 :(得分:0)

试一试。

myObj.linkValue = myObj.linkValue.map((obj, index) => ({ [`linkValue${index + 1}`]: obj.linkValue }))
相关问题