Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中将对象数组转换为映射对象?_Javascript_Jquery_Json - Fatal编程技术网

如何在JavaScript中将对象数组转换为映射对象?

如何在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

如何将JSON对象的
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;
});