Apostolos Traganis
Apostolos Traganis

Reputation: 81

Javascript: Convert Array to Object

Which is the easiest way to convert this:

[{src:"websrv1"}, {dst:"websrv2"}, {dstport:"80"}]

to this:

{src:"websrv1", dst:"websrv2", dstport:"80"}

in order to pass it to AJAX data?

I'm using VisualSearch and it returns an array of Facet model instances which i need to convert into an Object.

Upvotes: 2

Views: 776

Answers (6)

p.s.w.g
p.s.w.g

Reputation: 149078

Original answer using only the most basic features of JavaScript:

var input = [{src:"websrv1"}, {dst:"websrv2"}, {dstport:"80"}];

var output = {};
for (var i = 0; i < input.length; i++) {
  for (var n in input[i]) {
    output[n] = input[i][n];
  }
}

console.log(output);


UPDATE: Using newer features of JavaScript, you can do this trivially with Object.assign and spread syntax (...):

var input = [{src:"websrv1"}, {dst:"websrv2"}, {dstport:"80"}];

var output = Object.assign({}, ...input);

console.log(output);

Also, Object.assign(...input) will return the same result, but will modify the first element of the input array. As long as you don't mind that side effect, I'd use this simpler version.

Upvotes: -1

RoberMP
RoberMP

Reputation: 1356

Don't use this! but just for fun

var a = [{src:"websrv1"}, {dst:"websrv2"}, {dstport:"80"}];
var f = a.reduce((c,d) => Object.assign(c,d), {})

The tiny drawback is that a is mutated with an infinite recursive object but, who cares? it works in one line!

Upvotes: 0

htatche
htatche

Reputation: 693

My 2cents, very easy to read:

var myObj = {};
myArray.forEach(function(obj) {
  var prop = Object.keys(obj)[0];
  myObj[prop] = obj[prop];
})

Upvotes: -1

mpm
mpm

Reputation: 20155

var a = [{src:"websrv1"}, {dst:"websrv2"}, {dstport:"80"}];

 var b = a.reduce(
   function(reduced,next){
      Object.keys(next).forEach(function(key){reduced[key]=next[key];});
      return reduced;
   }
 );

//b should be {src:"websrv1", dst:"websrv2", dstport:"80"}

think about the array.reduce function everytime you need to perform these kind of transformations.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

Upvotes: 3

cookie monster
cookie monster

Reputation: 10982

Use .reduce().

var result = data.reduce(function(obj, item) {
    for (var key in item)
        obj[key] = item[key];
    return obj;
}, {});

Upvotes: 1

Leonardo Delfino
Leonardo Delfino

Reputation: 1498

If you are using jquery, try this:

var array = [{src:"websrv1"}, {dst:"websrv2"}, {dstport:"80"}]
var arrayObj = {};

for(var i in array) {
    $.extend(arrayObj, array[i]);
}

Upvotes: 2

Related Questions