Дедупликация между строками с сохранением идентификационной метки

Проблема с JavaScript Можно ли это сделать?

У меня есть входной массив, содержащий что-нибудь от 2 до 5 строк, каждая с меткой, разделенной точкой с запятой, чтобы идентифицировать его. Мне нужно дедуплицировать, чтобы выходные данные удаляли дубликаты, а также поддерживали строковые идентификаторы, группируя при необходимости.

Массив ввода (3 элемента)

string1, яблоко | строка2, оранжевый |string3; оранжевый

Выходной массив (теперь 2 элемента, так как "оранжевый" появился дважды)

string1, яблоко | строка2/string3; оранжевый

2 ответа

Решение

Я не против помочь людям, которые только начинают работать с новым языком программирования или программированием: ( также js fiddle)

var arr=["string1;apple","string2;orange","string3;orange"];
var finalArr= [];
var output = {};
for(var i in arr){
    var keyVal = arr[i].split(";");
    if(output[keyVal[1]]==undefined){
        output[keyVal[1]] = [keyVal[0]]
    } else {
        //should be an array
        output[keyVal[1]].push(keyVal[0]);
    }
}
for( var i in output){
    finalArr.push(output[i].join("/")+";"+i);
}
console.log(finalArr);

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

  • Преобразовать строку, разделенную символом трубы, в массив.
  • Итерация по массиву
    • Присвойте каждой паре идентификатор / значение паре свойство = значение в структуре.
    • Удалите идентификатор и разделитель, чтобы вы остались с самой строкой в ​​массиве.
  • Сортировать массив.
  • Дублируйте массив.
  • Итерация по массиву.
    • Выполните итерацию по структуре, чтобы создать список свойств, значения которых соответствуют записи.
    • Отключите свойства, значения которых соответствуют записи, чтобы сократить время в будущих итерациях.

Это только один из способов сделать это. Я дал вам несколько советов о том, как вы можете подойти к проблеме, но вы сами должны это кодировать.

Другие вопросы по тегам