我有一个数组:
[ '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"}
答案 0 :(得分:3)
您可以使用Object.assign
和Array.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)
将功能reduce
与Spread 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);