如何修改数组并将其转换为JSON

时间:2018-03-09 22:42:38

标签: javascript arrays json ecmascript-6

我有一个数组:

[ 'Item 1', 'Item 2', 'Item 3' ]

我需要最终结果

{ 'Item 1':true, 'Item 2':true, 'Item 3':true }

使用ES6我对此非常接近:

        let arr = [];
        for (let m of crmData.modRequired) {
            let i = m + ':true';
            arr.push(i);
        }
        modReq = JSON.stringify(arr);
        modReq = modReq.replace(/\[/, '{');
        modReq = modReq.replace(/\]/, '}');

但是这产生了: {"Quotes:true","Flight Logs:true","Currency Records:true","FTD:true","Maintenance Tracker:true"}

5 个答案:

答案 0 :(得分:3)

您可以使用Object.assignArray.map轻松完成此操作,如下所示:

我们的想法是将您的值数组映射到遵循{"ItemX": true}模式的对象数组中,然后使用Object.assign将它们合并为单个对象。

var items = ["Item 1", "Item 2", "Item 3"];

var mapped = Object.assign({}, ...items.map(item => ({[item]: true})));

console.log(JSON.stringify(mapped));

答案 1 :(得分:2)

您应该可以使用数组.reduce方法执行此操作。这会将数组转换为您想要的对象。然后,您可以使用JSON.stringify将其转换为json字符串。

const myArray = [ 'Item 1', 'Item 2', 'Item 3' ]

// I need the final result to be
// { 'Item 1':true, 'Item 2':true, 'Item 3':true }

const myObj = myArray.reduce((obj, key) => {
  obj[key] = true;
  return obj;
}, {});

console.log("javascript object:", myObj);
console.log("json string:", JSON.stringify(myObj))

答案 2 :(得分:0)

使用.forEach

let arr = [ 'Item 1', 'Item 2', 'Item 3' ];
let newArr = {};
arr.forEach(item=>{
  newArr[item] = true;
});
console.log(newArr);

但我更喜欢mhodges回答:

let arr = [ 'Item 1', 'Item 2', 'Item 3' ];
console.log(Object.assign({}, ...arr.map(item => ({[item]: true}))))

答案 3 :(得分:0)

将功能reduceSpread Syntax

一起使用

var array = [ 'Item 1', 'Item 2', 'Item 3' ],
    result = array.reduce((a, c) => ({...a, ...{[c]: true}}), {});

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

使用forEach

var array  = [ 'Item 1', 'Item 2', 'Item 3' ],
    result = {};

array.forEach(c => result[c] = true);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 4 :(得分:0)

只需在循环数组时构建对象(一步),您就不必更换任何大括号或括号。

var ary = [ 'Item 1', 'Item 2', 'Item 3' ];
var obj = {};
ary.forEach(function(itm) { obj[itm] = true; } );
console.log(obj);
objJSON = JSON.stringify(obj);
console.log(objJSON);