23.04.2015, 12:18
|
|
Кандидат Javascript-наук
|
|
Регистрация: 28.06.2009
Сообщений: 120
|
|
Как найти совпадения в массиве и добавить их в двумерный массив?
Здравствуйте.
Ищу совпадения в массиве:
var arr = [0, 0, 4, 8, 8, 10, 45, 0, 23, 3 ,8];
var result = arr.filter(function (item, index, array) {
return array.indexOf(item) !== array.lastIndexOf(item); // [0, 0, 8, 8, 0, 8]
});
Вопрос: как сделать так, чтоб для отдельных совпадений, создавался свой массив? То есть, конечный результат должен быть такой: [[0, 0, 0], [8, 8, 8]]
Спасибо за помощь и ваше время.
|
|
23.04.2015, 13:01
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,105
|
|
Armen,
<script>
var arr = [0, 0, 4, 8, 8, 10, 45, 0, 23, 3, 8],
result = [],
temp = {};
arr.forEach(function(item, index, array) {
temp[item] ? (temp[item].push(item)) : (temp[item] = [item]);
});
Object.keys(temp).forEach(function(key) {
temp[key].length > 1 && result.push(temp[key])
});
document.write(JSON.stringify(result))
</script>
|
|
23.04.2015, 13:08
|
|
Кандидат Javascript-наук
|
|
Регистрация: 28.06.2009
Сообщений: 120
|
|
Сообщение от рони
|
Armen,
<script>
var arr = [0, 0, 4, 8, 8, 10, 45, 0, 23, 3, 8],
result = [],
temp = {};
arr.forEach(function(item, index, array) {
temp[item] ? (temp[item].push(item)) : (temp[item] = [item]);
});
Object.keys(temp).forEach(function(key) {
temp[key].length > 1 && result.push(temp[key])
});
document.write(JSON.stringify(result))
</script>
|
А есть вариант без создания объекта?
|
|
23.04.2015, 13:14
|
|
Кандидат Javascript-наук
|
|
Регистрация: 28.06.2009
Сообщений: 120
|
|
Сообщение от рони
|
Armen,
<script>
var arr = [0, 0, 4, 8, 8, 10, 45, 0, 23, 3, 8],
result = [],
temp = {};
arr.forEach(function(item, index, array) {
temp[item] ? (temp[item].push(item)) : (temp[item] = [item]);
});
Object.keys(temp).forEach(function(key) {
temp[key].length > 1 && result.push(temp[key])
});
document.write(JSON.stringify(result))
</script>
|
Уже не нужно! Спасибо, так подошло!
|
|
23.04.2015, 13:27
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,105
|
|
Armen,
<script>
var arr = [0, 0, 4, 8, 8, 10, 45, 0, 23, 3, 8];
var result = arr.filter(function(item, index, array) {
return array.indexOf(item) !== array.lastIndexOf(item)
}).sort(function(a, b) {
return b - a
}).reduce(function(arr, item) {
arr[0] && arr[0][0] == item ? arr[0].push(item) : arr.unshift([item])
return arr;
}, []);
document.write(JSON.stringify(result))
</script>
|
|
|
|