2016-04-18 2 views
2

Я пытаюсь объединить повторяющиеся записи в массиве объектов, создав новый массив.Проверка дубликатов записей в массиве объектов и создание нового

Я не знаю, как проверить дублирование, не зацикливая новый массив, который затем меня задевает, пытаясь подтолкнуть материал, потому что он делает это каждый раз для внешнего цикла.

Как это сделать должным образом?

var arr=[0]; 
for (var k in data) { 
    var name = data[k].name; 
    var item = data[k]; 
    //check if already in array 
    for (var l in arr){ 
     if (arr[l].name == name){ 
      arr[l].value = arr[l.value] + ';;' + item.value; 
     } else { 
      arr.push(item); 
     } 
    } 
} 
+0

ли вы рассмотреть возможность использования Lodash? Ваша проблема может быть решена в одной строке. :) –

+0

Также обратите внимание, что 'for..in' предназначен для циклических объектов, а не массивов. – elclanrs

+1

Как я буду делать это с помощью lodash? – matt

ответ

1

С Lodash

var arr = _.uniqBy(data, 'name'); 
+0

Прохладный материал, спасибо большое. – matt

0

Не совсем уверен, если я отвечаю на ваш вопрос прямо, но вы можете использовать .indexOf(), чтобы решить эту проблему. IndexOf возвращает позицию элемента в массиве, или -1, если он не существует: http://www.w3schools.com/jsref/jsref_indexof_array.asp

var oldArr = [1,2,2,2,3,4,5]; 
var newArr = []; 

for (var i = 0; i < oldArr.length; i++) { 
    if (newArr.indexOf(oldArr[i]) == -1) { 
     newArr.push(oldArr[i]); 
    } 
} 

console.log(newArr); 
Смежные вопросы