2015-09-28 101 views
0

存在一种更优雅的方式来创建一个数组中的对象,而不是这个?将数组转换为JavaScript中的对象

var createObject = function(){ 
var myArray= generateArray(); 
var myObject = { 
    question : myArray[0], 
    answerA : myArray[1], 
    answerB : myArray[2], 
    answerC : myArray[3], 
    answerD : myArray[4] 
    }; 
return myObject; 
} 
+0

它会更优雅,更好的缩进。无论如何...如果数组元素0始终是“问题”,并且所有其余元素变为答案A,B,C等,那么您可以使用循环 - 但是如果只有四个答案,则循环代码不是会更短,所以... – nnnnnn

回答

1

你的背景?蟒蛇?

var values = generateArray(); 
var obj = {}; 
["question", "answerA", "answerB", "answerC", "answerD"].forEach(function(item, idx) { 
    obj[item] = values[idx]; 
}); 

return obj; 
+1

考虑到标签都是Javascript标签,并且他使用function(){...}来声明他的功能,我猜测他是在使用Javascript。 ;-) – mbinette

+0

@mbinette我知道,我问了背景;)它接缝像他不习惯js,但肯定理解编程.. – webdeb

+0

@mbinette我特别询问了python,因为它提供了一些非常好的功能,可以在一行中解决这样的问题.. – webdeb

0

你可以定义属性图:

var createObject = function(){ 
    // The map should have the attribute names set in order defined in `myArray` 
    var map = ["question", "answerA", "answerB", "answerC", "answerD"] 
    var myArray = generateArray(); 
    var myObject = {}; 
    for(var i in map) 
     myObject[map[i]] = myArray[i]; 
    return myObject; 
} 
0

试试这个超越'A''B''C''D'

function arrayToObject (array) { 
    return array.reduce(
     function (object, cell, index) { 
     if (index > 0) object['answer' + String.fromCharCode(64 + index)] = cell; 
     else   object['question'] = cell; 
     return object; 
     }, {} 
    ); 
    } 
0

如果你想有一个函数,它接受一个数组作为参数,并返回一个对象,这是我该怎么做:

var toObject = function(arr) { 
    var newObj = {}; 

    for(var i = 0; i < arr.length; i++) { 
    newObj[i] = arr[i]; 
    } 
    return newObj; 
}; 

但是,请记住,JavaScript数组只是对象有更多的方法可用于他们s例如push(),pop()和长度属性。

希望这会有所帮助!