将Javascript对象数组转换为一个对象

将Javascript对象数组转换为一个对象,javascript,reactjs,react-native,Javascript,Reactjs,React Native,假设我有一个这样的数组 var myarray=[{"id":1234, "listtext":open, "prop3":value3 ,"prop4": value4}, {"id":1235, "listtext":open, "prop3":value3 ,"prop4": value4}, {"id":1236, "listtext":open, "prop3":value3 ,"prop4": value4},

假设我有一个这样的数组

var myarray=[{"id":1234, "listtext":open, "prop3":value3 ,"prop4": value4},
             {"id":1235, "listtext":open, "prop3":value3 ,"prop4": value4},
             {"id":1236, "listtext":open, "prop3":value3 ,"prop4": value4},
             {"id":1237, "listtext":open, "prop3":value3 ,"prop4": value4}];
但我想把它转换成这样一个对象:

{1234:open,1235:close, 1236: pending,1237:awaiting response}

这能做到吗?我尝试过的所有方法都只获取最后一个键值对。

如果您使用的是ES6或更高版本:

const converted = Object.assign({}, ...myArray.map(object => ({[object.id]: object})))

如果您使用的是ES6或更高版本:

const converted = Object.assign({}, ...myArray.map(object => ({[object.id]: object})))

您可以简单地在数组上循环并创建一个新对象

var myarray=[{“id”:1234,“listtext:'open','prop3:'value3','prop4:'value4'},
{“id”:1235,“listtext:'open',“prop3:'value3',“prop4:'value4'},
{“id”:1236,“listtext:'open',“prop3:'value3',“prop4:'value4'},
{“id”:1237,“listtext:'open',“prop3:'value3',“prop4:'value4'}];
常数res={};
myarray.forEach(obj=>{
res[obj.id]=obj.listtext;
})

log(res)
您可以简单地在数组上循环并创建一个新对象

var myarray=[{“id”:1234,“listtext:'open','prop3:'value3','prop4:'value4'},
{“id”:1235,“listtext:'open',“prop3:'value3',“prop4:'value4'},
{“id”:1236,“listtext:'open',“prop3:'value3',“prop4:'value4'},
{“id”:1237,“listtext:'open',“prop3:'value3',“prop4:'value4'}];
常数res={};
myarray.forEach(obj=>{
res[obj.id]=obj.listtext;
})
console.log(res)
var myarray=[{“id”:1234,“listtext”:“open”,“prop3”:“value3”,“prop4”:“value4”},
{“id”:1235,“listtext:“closed”,“prop3:'value3',“prop4:'value4'},
{“id”:1236,“listtext”:“待定”,“prop3”:“value3”,“prop4”:“value4”},
{“id”:1237,“listtext”:“open”,“prop3”:“value3”,“prop4”:“value4”}];
var myObjects=[];//创建一个空数组以容纳转换的对象。
//循环遍历数组以逐个转换它们
myarray.forEach(函数(元素){
var obj={};//创建一个空对象
obj[element.id]=element.listtext;
myObjects.push(obj);//将对象添加到数组中
});
myObjects.forEach(函数(对象){
console.log(对象);
});
var myarray=[{“id”:1234,“listtext”:“open”,“prop3”:“value3”,“prop4”:“value4”},
{“id”:1235,“listtext:“closed”,“prop3:'value3',“prop4:'value4'},
{“id”:1236,“listtext”:“待定”,“prop3”:“value3”,“prop4”:“value4”},
{“id”:1237,“listtext”:“open”,“prop3”:“value3”,“prop4”:“value4”}];
var myObjects=[];//创建一个空数组以容纳转换的对象。
//循环遍历数组以逐个转换它们
myarray.forEach(函数(元素){
var obj={};//创建一个空对象
obj[element.id]=element.listtext;
myObjects.push(obj);//将对象添加到数组中
});
myObjects.forEach(函数(对象){
console.log(对象);
});
var myarray=[
{id:1234,listtext:'open'},
{id:1235,listtext:'closed'},
{id:1236,listtext:'pending'},
{id:1237,listtext:'open'}
]
var输出=myarray.reduce(函数(acc,项){
acc[item.id]=item.listtext
返回acc
}, {})
console.log(输出)
var myarray=[
{id:1234,listtext:'open'},
{id:1235,listtext:'closed'},
{id:1236,listtext:'pending'},
{id:1237,listtext:'open'}
]
var输出=myarray.reduce(函数(acc,项){
acc[item.id]=item.listtext
返回acc
}, {})


console.log(output)
我只需要id和listtext属性的键值对我做到了,我刚刚得到最后一个值。e、 g{4321:“某些状态”}无意冒犯,但您的源数据是垃圾。请尝试在你的问题中包含有用的数据,这样人们就不必猜测你需要什么。可能重复的可能重复的可能重复的我只需要id和listtext属性的键值对我这样做了,我刚刚得到最后一个值。e、 g{4321:“某些状态”}无意冒犯,但您的源数据是垃圾。请尝试在您的问题中包含有用的数据,这样人们就不必猜测您需要什么。您的可能重复犯了一个小错误:当您启动空对象时,您正在使用常量。这不是一个真正的错误,但如果不使用ES6,可能会造成混乱。将属性分配给一个
const
对象会很好。@dentemm,因为我们没有重新分配res,我们可以将其声明为const objAh是的,我的错误!您犯了一个小错误:当您启动空对象时,您使用了一个const,这并不是一个真正的错误,但是如果不使用ES6,可能会让人困惑。将属性分配给一个
const
对象会很好。@dentemm,因为我们没有重新分配res,我们可以将其声明为const objAh是的,我的错误!这对@ShubhamKhatri的答案有何改进?@Tibrogargan当我发布我的答案时,我不知道其他人也写了同样的答案谢谢。我最初的解决方案实际上是可行的。我刚刚意识到我的源数据中的ID是相同的,这就是为什么我只得到一个键值对。这对@ShubhamKhatri的答案有什么改进?@Tibrogargan当我发布我的答案时,我不知道其他人写了同样的答案谢谢。我最初的解决方案实际上是可行的。我刚刚意识到ID在我的源数据中是相同的,这就是为什么我只得到一个键值对。谢谢。我最初的解决方案实际上是可行的。我刚刚意识到源数据中的ID是相同的,这就是为什么我只得到一个键值对(object
?看起来您正在使用数组变量,就像它是一个函数一样。它是spread的一些用法还是缺少
.map
?它确实是spread运算符,在这里用于访问数组中的项。免责声明:我自己没有想到这个;-)在某个地方在线找到了这个,并将其添加到我的工具带中。我发现它是一个非常有用的工具,而不是扩展。这部分:
myArray(object
,执行它会给我“myArray不是一个函数”