将两个数组连接到记录数组

时间:2015-11-03 22:50:52

标签: javascript arrays sorting records

我目前正在尝试将数组连接到一个记录数组中,其中两个值直接排列为:

得分:

[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]的情况下以完整形式返回数组?

4 个答案:

答案 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.logconsole.dir之间的区别。

.log()只是调用toString的{​​{1}}方法。这就是为什么你会看到一个字符串,它会向你显示数组的浅层描述。

Object改为输出指定JavaScript对象属性的交互列表。

您的代码应为:

.dir()