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