2016-05-03 2 views
0

У меня есть один массивКак сделать массив объектов с помощью массива?

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" in in 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); 
+0

'' ar' и arr'? Это совсем не смущает ... – nnnnnn

ответ

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>');

+0

@parnav этот массив может быть этим '['po', 'cc', 'aa']' не уверен, что он не отформатирован – user944513

+0

не уверен, что он отсортирован. Я использую lodash – user944513

+0

, есть ли способ делать в lodash – user944513

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

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'}] 
4

Это предложение в две части, первая построить объект с ссылкой на элементы arr и создать новый массив с данным i от ar.

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>');

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); 
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)); 

Выход: [{ "Имя": "а"} , {"name": "b"}, {"name": "c"}]

0

Я предполагаю, что это одна очень функциональная чтобы выполнить эту работу не более, чем линию назначения. Тем не менее, Anoop Joshi's answer является более элегантным при условии, что массив ar короче, чем длина до массива arr.

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>");

Смежные вопросы