如何使用数组制作对象数组?

时间:2016-05-03 07:18:54

标签: javascript jquery

我有一个数组

var ar=['aa','cc','po']

我想在检查给定数组的值后推送新数组中的对象。换句话说

我有这些给定的条件

var ar=['aa','cc','po']

var arr =[{name:"po"},{name:'aa'},{name:'cc'}];

新数组中的预期输出

  [{name:'aa'},{name:'cc'},{name:"po"}]

作为"aa"索引中的0,我添加了名称属性为aa的对象。

我试着这样。但我用了两个来看。是否有任何简单的方法来做到这一点

FIDDLE

var newArr=[];
for(var i=0;i<ar.length ;i++){
   var text =ar[i];
   for(var j=0;j<arr.length ;j++){
    var obj =arr[j];
    console.log(obj.name);
     /*if(obj.name===text){
       newArr.push(obj);
     }*/
    }
}
console.log(newArr);  

7 个答案:

答案 0 :(得分:4)

这是一个提案分为两部分,首先构建一个对象,引用arr的项目,然后用ar的给定项创建一个新数组。

&#13;
&#13;
var ar = ['aa', 'cc', 'po'],
    arr = [{ name: "po" }, { name: 'aa' }, { name: 'cc' }],
    object = Object.create(null),
    result = [];

arr.forEach(function (a) {
    object[a.name] = a;
});

ar.forEach(function (a) {
    object[a] && result.push(object[a]);
});

document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
&#13;
&#13;
&#13;

答案 1 :(得分:3)

使用 forEach 迭代器并根据名称生成对象引用,然后使用 map() 生成结果数组

var ar = ['aa', 'cc', 'po']

var arr = [{
  name: "po"
}, {
  name: 'aa'
}, {
  name: 'cc'
}];

var ref = {};

// generating object reference with name property
arr.forEach(function(v) {
  ref[v.name] = v;
});

// generating result array 
// or you can use forEach as @NinaScholz answer
var res = ar.map(function(v) {
  return ref[v];
}).filter(function(v) { // use filter to avoid null values , in case of missing elements
  return v != null;
});

document.write('<pre>' + JSON.stringify(res, null, 3) + '</pre>');

答案 2 :(得分:1)

试试这个:

function convert(source) {

  var 
    obj = [],
    i;

  for (i = 0; i < source.length; ++i) {

    obj.push({name: source[i]});
  }

  return obj;
}

convert(['aa', 'bb', 'cc']); // [{name:'aa'},{name:'bb'},{name:'cc'}]

答案 3 :(得分:1)

如果您想按顺序从数组中分配值,这将有效:

var ar=['aa','cc','po']

var arr =[{name:"po"},{name:'aa'},{name:'cc'}];

arr.map(function(obj,key){
    obj.name = ar[key];
});

console.log(arr);

答案 4 :(得分:0)

这样做

var ar = ['aa', 'cc', 'po']
var arr = [{  name: "po"}, {  name: 'aa'}, {  name: 'cc'}];
$.each(ar, function(i, v) {
  arr[i].name = v;
});
console.log(arr)

Fiddle

答案 5 :(得分:0)

var array=['a','b','c'];
var arrayObj=[];
for(var i=0;i<array.length;i++){
 var obj={};
 obj.name=array[i];
 arrayObj.push(obj);
}
console.log(JSON.stringify(arrayObj));

输出:   [{ “名称”: “一个”},{ “名称”: “B”},{ “名称”: “C”}]

答案 6 :(得分:0)

我想这只是一个非常实用的方法来完成这项工作,只需要一个分配线。但是,如果ar数组的长度小于等于arr数组的长度,Anoop Joshi的answer会更优雅。

&#13;
&#13;
var arr = ['aa','cc','po'],
     ar = [{name:"po"},{name:'aa'},{name:'cc'}],
    res = arr.map(e => ar[ar.findIndex(f => f.name == e)]);

document.write("<pre>" + JSON.stringify(res) + "</pre>");
&#13;
&#13;
&#13;