如何在JavaScript中将对象数组转换为映射对象?
如何将JSON对象的如何在JavaScript中将对象数组转换为映射对象?,javascript,jquery,json,Javascript,Jquery,Json,如何将JSON对象的initialArrayarray之类的东西转换为finalObjectmap var initialArray = [ { id:'id1', name:'name1' }, { id:'id2', name:'name2' }, { id:'id3', name:'name3' }, { id:'id4', name:'name4' } ]; va
initialArray
array之类的东西转换为finalObject
map
var initialArray = [
{ id:'id1', name:'name1' },
{ id:'id2', name:'name2' },
{ id:'id3', name:'name3' },
{ id:'id4', name:'name4' }
];
var finalObject = {
'id1':'name1',
'id2':'name2',
'id3':'name3',
'id4':'name4'
}
需要考虑的事项:
- ID是字符串
- 我试过在循环中-无法运行-
有什么想法吗?
resp[key.id]=key.img代码>
你正确地称之为钥匙。但你需要一个价值观
resp[x[key].id]=x[key].img代码>
可以在数组上循环,并为每个对象向finalObject
添加一个新属性,该属性的名称为id,值为name
var finalObject = {};
for (var i = 0, max = initialArray.length; i < max; i++)
finalObject[initialArray[i].id] = initialArray[i].name;
var finalObject={};
对于(变量i=0,max=initialArray.length;i
您需要对数组中的对象进行操作,而不是对数组中包含其索引的字符串进行操作
您还应该使用常规for循环来迭代数组
您的JSFIDLE已修复:
var x = [ {id:'1', img:'img1'}, {id:'2', img:'img2'}, {id:'3', img:'img3'} ];
var resp = {};
for( var i = 0 ; i < x.length ; i++ ){
var obj = x[i];
resp[obj.id] = obj.img;
}
document.write( JSON.stringify(resp, undefined, 2) );
varx=[{id:'1',img:'img1'},{id:'2',img:'img2'},{id:'3',img:'img3'}];
var resp={};
对于(变量i=0;i
此解决方案特定于特定问题的属性名称,但Array.prototype.reduce
是一个函数,我一直用于需要非数组结果的任何类型的数组迭代。中没有正确使用for
for(var i=0;i如果我理解正确,您可以执行以下操作
var x =' [ {"id":"1", "img":"img1"}, {"id":"2", "img":"img2"}, {"id":"3", "img":"img3"}]';
var resp = {};
var json = $.parseJSON(x);
$(json).each(function(i,v){
resp[v.id]=v.img;
});
console.log( resp);
您谈到了json,但在您提供的FIDLE中没有json,甚至jquery也没有添加为资源,所以我做了一些假设
今天我在同一个问题上,除了@adam rackis的答案,我在这里没有找到答案
我发现的方式是:
var initialArray = [
{ id:'id1', name:'name1' },
{ id:'id2', name:'name2' },
{ id:'id3', name:'name3' },
{ id:'id4', name:'name4' }
],
finalObject = {};
$.each(initialArray, function(k,v) {
finalObject[v.name] = v.value;
});
这些只是JavaScript对象,您的输入中没有JSON。只需删除“id”+部分,这正是我所需要的。谢谢!当我回答时,您的问题明确表示您需要“id1”:“name1”,并且您的initialArray=[{id:'1',name:'name1}所以需要在“id”之前加上前缀。我在制作JSFIDLE;)时没有更改您的初始数组
for (var i=0; i<x.length; i++) {
var id = 'id' + x[i].id;
var img = x[i].img;
resp[id] = img;
}
var x =' [ {"id":"1", "img":"img1"}, {"id":"2", "img":"img2"}, {"id":"3", "img":"img3"}]';
var resp = {};
var json = $.parseJSON(x);
$(json).each(function(i,v){
resp[v.id]=v.img;
});
console.log( resp);
var initialArray = [
{ id:'id1', name:'name1' },
{ id:'id2', name:'name2' },
{ id:'id3', name:'name3' },
{ id:'id4', name:'name4' }
],
finalObject = {};
$.each(initialArray, function(k,v) {
finalObject[v.name] = v.value;
});