我目前正在尝试将数组连接到一个记录数组中,其中两个值直接排列为:
得分:
[1,0,43,12]
食品:
['ham','cheese','potato','cabbage']
我想创建一个数组:
[{food: 'ham', score: 1}, {food: 'cheese', score: 0}, {food: 'potato', score: 43}, {food: 'cabbage', score: 12}]
我可以创建个人记录:
{food: 'ham', score: 1}
{food: 'cheese', score: 0}
等...
使用此代码:
var foodscore = []
for(i in score){
var record = {}
record.food = food[i]
record.score = score[i]
foodscore.push(record)
}
但是当我在console.log(foodscore)时,我得到了:
[Object,Object,Object,Object]
返回,而不是记录。什么是一个很好的解决方案?
编辑:我忘了添加这段代码是函数的一部分,我想将上面连接数组的值返回给函数的值。如何在不输出[Object,Object,Object,Object]的情况下以完整形式返回数组?答案 0 :(得分:1)
如果这两个数组的长度相同,您可以遵循以下方法:
// We define a constructor function that
// will be used for the creation of the objects that we will push to our
// array
function FoodScore(food, score){
this.food = food;
this.score = score;
}
// The array with the food scores.
var foodScores = [];
// We loop through the scores array and for each element
// we create a food score object and we push it to the foodScores.
for(var i=0, len=score.length; i<len; i++){
foodScores.push(new FoodScore(food[i], score[i]));
}
然而,当我在console.log(foodscore)时,我得到: [对象,对象,对象,对象]
这是合理的,因为foodscore
包含四个对象。
答案 1 :(得分:0)
如果您的数组总是长度相同,并且两个数组(得分和食物)都具有equaly排序的值,您可以迭代其中一个并按如下方式创建对象:
var score = [1,0,43,12], food = ['ham','cheese','potato','cabbage'], result = [];
for (var i = 0; i < score.length; i++) {
result.push({'food': food[i], 'score': score[i]});
}
console.log(result);
答案 2 :(得分:0)
您的代码应该产生所需的结果。您似乎只是对如何打印结果有疑问。
尝试此操作以查看数组实际包含的内容:
console.dir(foodscore);
但是,为了更简洁地生成数组,您可以使用:
var foodscore = score.map(function (sc, i) {
return { score: sc, food: food[i] };
});
答案 3 :(得分:0)
您的代码很好,但您误解了console.log
和console.dir
之间的区别。
.log()
只是调用toString
的{{1}}方法。这就是为什么你会看到一个字符串,它会向你显示数组的浅层描述。
Object
改为输出指定JavaScript对象属性的交互列表。
您的代码应为:
.dir()