排序数组(二维数组)需要帮助
Basiclly我想要做的是将数组输入的值排序为像uniteUnique([1, 3, 2], [5, 2, 1, 4], [2, 1])
这样的排序二维数组,如[[1, 1, 1], [2, 2, 2], [4], [3], [5]]
。 阵列不一定是编号/值顺序。下面的代码是我的尝试:排序数组(二维数组)需要帮助
function uniteUnique(arr) { let times = 0;
var unique = [[]];
for (var i = 0; i < Array.prototype.slice.call(arguments).length; i++) {
times = 0;
for (var j = 0; j < arguments[i].length; j++) {
for (var h = 0; h < unique.length; h++) {
var pushArray = []
if(unique[h][0] === arguments[i][j]) {
unique[h].push(arguments[i][j])
arguments[i].splice(j)
}
else {
unique.push([arguments[i][j]])
}
}
}
}
return unique
}
uniteUnique([1, 3, 2], [5, 2, 1, 4], [2, 1]);
- >https://repl.it/@John_Nicole/unique
我只有一个参数对所有的输入数组
我有一个unique
阵列1的空白数组。它是一个二维数组。
然后我通过,例如,[1, 3, 2]
的值,并检查unique
中是否有第一个值作为我的编号(arguments[i][j]
)。
如果为true,我推动数字arguments[i][j]
,然后删除原始数组中的数字splice()
。
如果为false,我将新阵列插入到unique
中,并带有这个无法识别的值。
变量
h
的快速概述:这是unique
数组,我要与比较。它可能是[2, 2, 2]
。这是从输入数组。例如,[1, 3, 2]
。j
:这个号码本身,它的伙伴i
。例如,arguments[i][j]
=[2, 1]
- >2
arguments
抓住所有,在这种情况下,3输入数组。Times
:这只是意味着0.没有用过这么多。
输入可能包括在自己的二维数组一样[1, 3, 2], [1, [5]], [2, [4]]
这是一个freeCodeCamp挑战的一部分 - >https://www.freecodecamp.org/challenges/sorted-union
我的问题是,为什么我的输出:
[ [], [ 1, 1 ],
[ 5, 5 ],
[ 5 ],
[ undefined, undefined ],
[ 2, 2 ],
[ 2 ],
[ 2 ],
[ 2 ],
[ 2 ],
[ undefined, undefined ],
[ undefined, undefined ],
[ undefined, undefined ],
[ undefined, undefined ] ]
? 当需要的输出是:通缉输出是[1, 1, 1], [2, 2, 2], [4], [3], [5]
我做错了什么?
我得到了多个2
的数组,例如([[ 2 ],[ 2 ],[ 2 ],[ 2 ]]
),即使我想将所有2
放入一个数组中?
回答:
你可以使用一个哈希表,并检查哈希键是否存在,如果没有,然后拿一个空数组作为哈希值,并将它推到结果集。
哈希表是一个对象(这里没有原型),它将值作为键和数组作为值。散列表的末尾保存数组中的所有值,如果找到新值,则将其插入结果集中。
{
1: [1, 1, 1],
2: [2, 2, 2],
3: [3],
4: [4],
5: [5]
}
function uniteUnique() { var result = [],
hash = Object.create(null);
Array.prototype.forEach.call(arguments, function (a) {
a.forEach(function (b) {
if (!(b in hash)) {
hash[b] = [];
result.push(hash[b]);
}
hash[b].push(b);
});
});
return result;
}
console.log(uniteUnique([1, 3, 2], [5, 2, 1, 4], [2, 1]));
.as-console-wrapper { max-height: 100% !important; top: 0; }
一些注释代码(未使用的变量被删除):
function uniteUnique() { var unique = [], // move all declarations to top
i, j, h,
pushed;
// array like objects have a length property
for (i = 0; i < arguments.length; i++) {
for (j = 0; j < arguments[i].length; j++) {
pushed = false;
for (h = 0; h < unique.length; h++) {
if (unique[h][0] === arguments[i][j]) {
// take the element, do not use splice, because with splicing
// the array becomes shorter and the index is updated in the
// next loop and is pointing to the element with the wrong index,
// because you get the element after next
// it is better not to mutate a variable, if it works without
// in this case, you iterate and visit each element only once
unique[h].push(arguments[i][j]);
pushed = true; // a value is found
break; // exit this loop
} // prevent more looping
}
if (!pushed) { // if not found
unique.push([arguments[i][j]]); // push the value
}
}
}
return unique;
}
console.log(uniteUnique([1, 3, 2], [5, 2, 1, 4], [2, 1]));
.as-console-wrapper { max-height: 100% !important; top: 0; }
以上是 排序数组(二维数组)需要帮助 的全部内容, 来源链接: utcz.com/qa/258296.html