在JavaScript中将数组组合成单个对象

时间:2018-07-28 11:33:08

标签: javascript arrays object

目前我有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"}];

9 个答案:

答案 0 :(得分:7)

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)

答案 1 :(得分: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 :(得分:2)

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

    });
console.log(newObjArray);

答案 3 :(得分:1)

好吧,我假设您要一个对象数组,该数组的长度与idArray和其他数组的长度相同。

这是一些代码:

var finalObjArray = [];

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

}

基本上,您正在将对象添加到该数组。希望对您有所帮助:)

答案 4 :(得分:1)

设置属性时没有finalObj [y]的记录,因此它返回undefined

要解决您的问题,请创建一个具有属性的对象,然后将其推入数组。

答案 5 :(得分: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

答案 6 :(得分: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;
}

答案 7 :(得分: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; }

答案 8 :(得分: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);