在JavaScript中将数组合并为单个对象

5

目前我有3个数组:

var idArray = [13, 24, 35];    
var dateArray = [20181920, 20181120, 20172505];
var contentArray = ["content1", "content2", "content3"];

我希望将所有数组合并为一个对象,但尝试使用for循环却产生了错误:
var finalObj = {};

for (var y = 0; y < dateArray.length; y++) { 
    finalObj[y].id = idArray[y];
    finalObj[y].date =  dateArrayArrange[y];
    finalObj[y].content =  contentArray[y];

}

我希望你能帮我实现以下目标:
finalObj = [{id:13, date:20181920, content:"content1"},
          {id:24, date:20181120, content:"content2"},
          {id:35, date:20172505, content:"content3"}];

finalObj 是一个对象,但结果是一个对象数组。 - Andreas
你到底遇到了哪个错误? - Black
9个回答

7
< p > finalObj 是一个对象,您需要将值推入数组中。此外,您还可以使用数组map方法,该方法将返回一个数组,因此无需单独将值推入数组中。

在任何数组上使用map方法,并使用index从其他数组获取相应的值

var idArray = [13, 24, 35];
var dateArray = [20181920, 20181120, 20172505];
var contentArray = ["content1", "content2", "content3"];

let m = idArray.map(function(item, index) {
  // here the map method will push the object to an 
  // array and will return that array
  return {
    id: item,
    date: dateArray[index],
    content: contentArray[index]
  }

})
console.log(m)


简短而精练,我喜欢map方法 :) +1 - MBJH
但不可扩展...并且硬编码变量和密钥,就像许多其他方法一样。 - Nina Scholz

3
您的finalObj是一个对象数组,因此您必须将其初始化为数组,如下所示:
var finalObj = [];
var idArray = [13, 24, 35];
var dateArray = [20181920, 20181120, 20172505];
var contentArray = ["content1", "content2", "content3"];

for (var y = 0; y < dateArray.length; y++) {
  finalObj.push(
    { id: idArray[y], date: dateArray[y], content : contentArray[y] }
  )
}

关于“将结果推送到最终数组”的部分,如果您在循环内添加一个额外的finalObj[y] = {}进行初始化,您的代码可能会起作用,并且您会得到:

for (var y = 0; y < dateArray.length; y++) {
  finalObj[y] = {}  
  finalObj[y].id = idArray[y];
  finalObj[y].date = dateArray[y];
  finalObj[y].content = contentArray[y];
}

它能够工作,但是

  finalObj.push(
    { id: idArray[y], date: dateArray[y], content : contentArray[y] }
  )

我认为这个版本更短,但仍然易读 :)

2
let newObjArray = idArray.map((value, index) => {
        return {
            id: value,
            date: dateArray[index],
            content:contentArray[index]
        }

    });
console.log(newObjArray);

1

我假设您想要一个与idArrays和其他内容长度相同的对象数组

以下是一些代码:

var finalObjArray = [];

for (var y = 0; y < dateArray.length; y++) { 
    finalObjArray.push({
                       id: idArray[y],
                       date: dateArrayArrange[y],
                       content: contentArray[y]
    });

}

基本上你正在将对象添加到该数组中。希望能帮到你 :)


1

您需要创建对象并将其添加到数组中。这段代码应该可以工作。

var idArray = [13, 24, 35];    
var dateArray = [20181920, 20181120, 20172505];
var contentArray = ["content1", "content2", "content3"];
var finalObj = [];

for (var y = 0; y < dateArray.length; y++) { 
    object = {};
    object.id = idArray[y];
    object.date =  dateArray[y];
    object.content =  contentArray[y];
    finalObj[y] = object;
}

1
当您设置属性时,finalObj [y] 没有记录,因此返回 undefined
要解决您的问题,请创建一个带有属性的对象,然后将其推送到数组中。

1
你可以这样做:

    var idArray = [13, 24, 35];    
    var dateArray = [20181920, 20181120, 20172505];
    var contentArray = ["content1", "content2", "content3"];
    
    var final = [];
    
    for (let y = 0; y < idArray.length; y++) { 
     let tmp = {};
        tmp.id = idArray[y];
        tmp.date =  dateArray[y];
        tmp.content =  contentArray[y];
        
        final.push(tmp);
    
    }
    
    console.log(final)

注意:`dateArrayArrange`并不存在,我认为你只是想说`dateArray`。

1
你可以在一个对象中收集所有的键值对(数量任意),并在映射值时将对象进行缩减。

var id = [13, 24, 35],
    date = [20181920, 20181120, 20172505],
    content = ["content1", "content2", "content3"],
    result = Object
        .entries({ id, date, content })
        .reduce((r, [k, values]) => values.map((v, i) => ({ ...r[i], [k]: v })), []);
        
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }


0
通过使用映射,我们可以编写一个函数,可以将其扩展到任意数量的数组等。下面的函数需要至少三个不同的字段。
function joinArrays(id, date, content,...array){
    const Arr = [...array];
    const newArr = new Array(Arr.length)
    for(let i=0; i<newArr.length;i++){
        newArr[i] ={}
    }
    Arr.map((rowArr,index)=>{
        rowArr.map((i,k)=>
            {
                key = arguments[index];
                let obj = {};
                obj[key] = i;
                newArr[k]=Object.assign(newArr[k],obj)}
        )
    }
    )
    console.log(newArr);
    return newArr;

}
target = joinArrays('id', 'date', 'content',idArray,dateArray,contentArray);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接