Использование Array.prototype.filter () не приводит к дедупликации массива массивов

вы можете использовать

$('.buttons').on('click', 'button', function(){
    // your magic goes here
});

или

$('.buttons').delegate('button', 'click', function() {
    // your magic goes here
});

, эти два метода эквивалентны, но имеют другой порядок параметров.

см .: Событие делегата jQuery

1
задан Rico Letterman 28 March 2019 в 00:20
поделиться

2 ответа

Ваш тест фильтра -

var result = data.filter((value, i, arr) => {
  return value[0] !== arr[i][0]
});

Но arr[i] всегда будет ссылаться на текущий элемент, перебираемый через - value, поэтому, независимо от ввода, value[0] !== arr[i][0] всегда будет оценивать как [ 115]. (потому что value === arr[i], так value[0] === arr[i][0]).

Вы можете добавить value[0] к Set, и при тестировании проверить, существует ли это значение в наборе или нет:

var data = [
  ['dupeValue', { data: 123 }],
  ['dupeValue', { data: 123 }],
  ['otherValue', { data: 1111111 }],
  ['dupeValue', { data: 123 }]
]

const firstElements = new Set();
var result = data.filter(([firstElement]) => {
  const alreadyHas = firstElements.has(firstElement);
  firstElements.add(firstElement);
  return !alreadyHas;
})

console.log(result)

0
ответ дан CertainPerformance 28 March 2019 в 00:20
поделиться

Вы можете использовать reduce() для сопоставления с объектом и Object.values() для получения результирующего массива

var data = [
  ['dupeValue', { data: 123 }],
  ['dupeValue', { data: 123 }],
  ['otherValue', { data: 1111111 }],
  ['dupeValue', { data: 123 }]
]

var result = Object.values(data.reduce((a, c) => (a[c[0]] = c, a), {}))
 

console.log(result)

0
ответ дан charlietfl 28 March 2019 в 00:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: