У меня есть массив объектов, в котором я храню атрибуты billkey и billvalue . Я хочу, чтобы billkey был ключом, а billvalue - значением этого конкретного ключа.

var log=[
{
  billkey:"Name",
  billvalue:"ABC"
},
{ 
  billkey:"Department",
  billvalue:"Computer"
}
{
  billkey:"Name",
  billvalue:"XYZ"
},
{ 
  billkey:"Department",
  billvalue:"Electrical"
}];

И я хочу преобразовать его в этот формат:

var log=[
    {
      Name:"ABC",
      Department:"Computer"
    },
    { 
      Name:"XYZ",
      Department:"Electrical"
    }];
0
Ruchi yadav 11 Янв 2017 в 08:03

4 ответа

Лучший ответ

Как насчет этого простого решения. Надеюсь, это поможет!

var log=[
{
  billkey:"Name",
  billvalue:"ABC"
},
{ 
  billkey:"Department",
  billvalue:"Computer"
},
{
  billkey:"Name",
  billvalue:"XYZ"
},
{ 
  billkey:"Department",
  billvalue:"Electrical"
}];

var arr = [];
var finalObj = [];

for(var i in log){
	var someObject = log[i];
	for(var j in someObject){
	  arr.push(someObject[j]);
	}
}

for(var k = 0; k < arr.length; k+=4){
      finalObj.push({
      Name: arr[k+1],
      Department: arr[k+3]
    });
}

console.log(finalObj);
0
HenryDev 11 Янв 2017 в 05:52

Для этого используйте простой цикл for.

var log = [{
  billkey: "Name",
  billvalue: "ABC"
}, {
  billkey: "Department",
  billvalue: "Computer"
}, {
  billkey: "Name",
  billvalue: "XYZ"
}, {
  billkey: "Department",
  billvalue: "Electrical"
}];

// array for storing result
var res = [];

// iterate upto the half length of the array
// since you are generating single element using 
// two adjacent elements in the array
for (var i = 0; i < log.length / 2; i++) {
  // initialize empty object
  var obj = {};
  // define first property of the object
  obj[log[2 * i].billkey] = log[2 * i].billvalue;
  // define the second property of the object
  obj[log[2 * i + 1].billkey] = log[2 * i + 1].billvalue;
  // push the object into the array
  res.push(obj);
}

console.log(res)
-1
Pranav C Balan 11 Янв 2017 в 05:22

Вы можете использовать Array#reduce и используйте оператор остатка как ведьму для использования либо последнего объекта, либо создания нового.

var log = [{ billkey: "Name", billvalue: "ABC" }, { billkey: "Department",  billvalue: "Computer" }, { billkey: "Name", billvalue: "XYZ" }, { billkey: "Department", billvalue: "Electrical" }],
    result = log.reduce(function (r, a, i) {
        var o = {};
        if (i % 2) {
            r[r.length - 1][a.billkey] = a.billvalue;
        } else {
            o[a.billkey] = a.billvalue;
            r.push(o);
        };
        return r;        
    }, []);

console.log(result);
0
Nina Scholz 11 Янв 2017 в 06:13

Создать результат с помощью цикла for

 // store the values
  var logs=[];
  var log=[
{
  billkey:"Name",
  billvalue:"ABC"
},
{ 
  billkey:"Department",
  billvalue:"Computer"
},
{
  billkey:"Name",
  billvalue:"XYZ"
},
{ 
  billkey:"Department",
  billvalue:"Electrical"
},
];

Зациклить первый массив

for (i = 0; i < log.length; i++) {
    // create empty variable for storing the values
    var index = new Array();
    // insert the first index value to key
    index[log[i].billkey] = log[i].billvalue
    // insert the second index value to key 
    index[log[i+1].billkey] = log[i+1].billvalue
    // insert the result in to new array
    logs.push(index);
    // increment the i with 1 
    i=i+1;
}
console.log(logs);
0
Rahman 11 Янв 2017 в 05:29