Javascript多维嵌套数组,在单个数组中排序

Javascript multidimensional nested array, sort in single array

本文关键字:数组 单个 排序 嵌套 Javascript      更新时间:2023-09-26

我是JavaScript的初学者,最近遇到了这个问题。我有一个阵列-

var array_input = [1,2, [1,2,3], [4,5,6, [9,8,10]]];

我想从下面的数组中出来,如下所示(需要使用for循环的答案(:

var array_output = [1,2,3,4,5,6,7,8,9,10]

您可以使用Set和递归函数来压平结果,然后最后对其应用基本排序:

function getValues(arr) {
  return [...arr.reduce( (acc, val) => 
    new Set([...acc, ...(Array.isArray(val) ? getValues(val) : [val])]), [])];
}
// Sample input
var array_input = [2,1, [1,3,2], [4,5,6, [9,8,10]]];
// Get values and sort them
var result = getValues(array_input).sort( (a,b) => a-b );
// Show output
console.log(result);

替代对象键

同样的原理也可以用于使用值作为键的对象,尽管我更喜欢Set方式。由于对象键是按数字顺序迭代的(当它们是数字时(,因此这里不需要显式排序步骤:

function getValuesAsKeys(arr) {
  return arr.reduce( (acc, val) => 
    Object.assign(acc, Array.isArray(val) ? getValuesAsKeys(val) : { [val]: val }), {} );
}
// Sample input
var array_input = [2,1, [1,3,2], [4,5,6, [9,8,10]]];
// Get values and sort them
var result = Object.values(getValuesAsKeys(array_input));
// Show output
console.log(result);

注意:Object.values方法目前几乎没有支持。可以使用Object.keys(getValues(array_input)).map(Number),因为在这个对象中,键是值,但在字符串类型中(当然(。

数字字符串数字可选

将数组转换为字符串是另一种可能性,但我真的不喜欢在最终需要数字而不是字符串时进行转换。

好的,我使用了来自不同来源的一堆东西。首先压缩数组,@Thalaivar的回答将其固定。

var array_input = [1,2, [1,2,3], [4,5,6, [9,8,10]]];
var pArray = array_input.join().split(',').map(Number);

然后,使用这个答案和一些轻微的修改(实现数字排序(,我们将在排序时从数组中删除任何重复项:

function uniqSort(a) {
    return a.sort(function sortNumber(a,b) {
        return a - b;
    }).filter(function(item, pos, ary) {
        return !pos || item != ary[pos - 1];
    })
}

然后调用那个函数。

var array_output = uniqSort(pArray);
var array_input = [1,2, [1,2,3], [4,5,6, [9,8,10]]];
console.log(array_input.join().split(',').map(Number));

你可以使用上面的。。。https://jsfiddle.net/vp9kq3a8/