вы можете использовать
$('.buttons').on('click', 'button', function(){
// your magic goes here
});
или
$('.buttons').delegate('button', 'click', function() {
// your magic goes here
});
, эти два метода эквивалентны, но имеют другой порядок параметров.
см .: Событие делегата jQuery
Ваш тест фильтра -
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)
Вы можете использовать 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)