уникальный массив javascript, основанный на одном свойстве

0

У меня многомерный массив в javascript. Я хочу сделать так, чтобы он показывал первую запись для каждого уникального "имени". Так, например, это:

[{"name":"Adelman , Erica","col1":"Vice President","col2":"test","col3":"test","col4":"73.77%"},
{"name":"Adelman , Erica","col1":"Vice President","col2":"test","col3":"test","col4":"73.77%"},
{"name":"Adelman , Erica","col1":"Vice President","col2":"test","col3":"test","col4":"73.77%"},
{"name":"Adelman , Erica","col1":"Vice President","col2":"test","col3":"test","col4":"73.77%"},
{"name":"Aellen , Nick","col1":"Director","col2":"test","col3":"test","col4":"96.88%"},
{"name":"Armstrong , Peter","col1":"Director","col2":"test","col3":"test","col4":"95.15%"},
{"name":"Ashmore , Abigail","col1":"Vice President","col2":"test","col3":"test","col4":"99.80%"},
{"name":"Avent , Christopher","col1":"Vice President","col2":"test","col3":"test","col4":"90.11%"},
{"name":"Baker , Ian Howard","col1":"Director","col2":"test","col3":"test","col4":"67.20%"},
{"name":"Baker , Ian Howard","col1":"Director","col2":"test","col3":"test","col4":"67.20%"},

Включилось бы в это:

[{"name":"Adelman , Erica","col1":"Vice President","col2":"test","col3":"test","col4":"73.77%"},
{"name":"Aellen , Nick","col1":"Director","col2":"test","col3":"test","col4":"96.88%"},
{"name":"Armstrong , Peter","col1":"Director","col2":"test","col3":"test","col4":"95.15%"},
{"name":"Ashmore , Abigail","col1":"Vice President","col2":"test","col3":"test","col4":"99.80%"},
{"name":"Avent , Christopher","col1":"Vice President","col2":"test","col3":"test","col4":"90.11%"},
{"name":"Baker , Ian Howard","col1":"Director","col2":"test","col3":"test","col4":"67.20%"},

Первоначально это не было многовариантным, и я мог бы использовать базовую функцию, но этот метод не будет работать для этого. Есть идеи? Довольно отчаянный! Благодарю.

  • 0
    На самом деле это массив объектов, а не многомерный массив ...
  • 0
    Извини .. мой плохой, собирался весь день: p
Теги:
multidimensional-array
unique

2 ответа

2
Лучший ответ

Что-то вроде этого создаст новый массив с единственными уникальными записями

var obj     = {},
    new_arr = [];

arr.forEach(function(itm) {
    if ( ! (itm.name in obj) ) obj[itm.name] = itm;
});

for (var key in obj) {
    new_arr.push(obj[key]);
}

FIDDLE

  • 0
    Почему бы вам просто не сделать new_arr.push(obj) ? Вместо того, for in цикле.
  • 0
    @RahilWazir - потому что я не нажимаю на этот объект, а на объекты, содержащиеся в этом объекте и т. Д. Просто использую имена в качестве ключей, чтобы убедиться, что они уникальны.
0

Это должно сделать трюк:

var foos = [{"name":"Adelman , Erica","col1":"Vice President","col2":"test","col3":"test","col4":"73.77%"},
{"name":"Adelman , Erica","col1":"Vice President","col2":"test","col3":"test","col4":"73.77%"},
{"name":"Adelman , Erica","col1":"Vice President","col2":"test","col3":"test","col4":"73.77%"},
{"name":"Adelman , Erica","col1":"Vice President","col2":"test","col3":"test","col4":"73.77%"},
{"name":"Aellen , Nick","col1":"Director","col2":"test","col3":"test","col4":"96.88%"},
{"name":"Armstrong , Peter","col1":"Director","col2":"test","col3":"test","col4":"95.15%"},
{"name":"Ashmore , Abigail","col1":"Vice President","col2":"test","col3":"test","col4":"99.80%"},
{"name":"Avent , Christopher","col1":"Vice President","col2":"test","col3":"test","col4":"90.11%"},
{"name":"Baker , Ian Howard","col1":"Director","col2":"test","col3":"test","col4":"67.20%"},
{"name":"Baker , Ian Howard","col1":"Director","col2":"test","col3":"test","col4":"67.20%"}];

var new_foos = [];

var previous_foo = null;

for (var i = 0; i < foos.length; i++) {
    if (previous_foo != foos[i].name)
    {
        new_foos.push(foos[i]);
    }

    previous_foo = foos[i].name;
}

Как упоминалось в комментариях, для этого требуется, чтобы foo был отсортирован. Это работает, если foo является несортированным:

var foos = [{"name":"Adelman , Erica","col1":"Vice President","col2":"test","col3":"test","col4":"73.77%"},
{"name":"Adelman , Erica","col1":"Vice President","col2":"test","col3":"test","col4":"73.77%"},

{"name":"Adelman , Erica","col1":"Vice President","col2":"test","col3":"test","col4":"73.77%"},
{"name":"Baker , Ian Howard","col1":"Director","col2":"test","col3":"test","col4":"67.20%"},
{"name":"Ashmore , Abigail","col1":"Vice President","col2":"test","col3":"test","col4":"99.80%"},
{"name":"Baker , Ian Howard","col1":"Director","col2":"test","col3":"test","col4":"67.20%"},
{"name":"Aellen , Nick","col1":"Director","col2":"test","col3":"test","col4":"96.88%"},
{"name":"Armstrong , Peter","col1":"Director","col2":"test","col3":"test","col4":"95.15%"},{"name":"Adelman , Erica","col1":"Vice President","col2":"test","col3":"test","col4":"73.77%"},
{"name":"Avent , Christopher","col1":"Vice President","col2":"test","col3":"test","col4":"90.11%"}];

var new_foos = [];

for (var i = 0; i < foos.length; i++) {
    var new_foo = true;
    for (var j = 0; j < new_foos.length; j++) {
        if (foos[i].name == new_foos[j].name) {
            new_foo = false;
            break;
        }
    }

    if (new_foo)
    {
        new_foos.push(foos[i]);
    }
}
  • 4
    Это не похоже на JavaScript ...
  • 1
    Почему решение в Python? : D
Показать ещё 12 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню