嵌套数组和访问它们的问题

时间:2018-12-27 03:47:17

标签: javascript arrays nested

因此,对于一般的编码,我真的很陌生,我将尝试进行编码训练营。 因此,现在我正在尝试着手准备“入门测试”,该测试将侧重于Javascript基础。 我有这个问题:

const charactersArray = [
    ['☆', 'D', 'a', '☆', '☆', 'r'],
    ['t', '☆', 'h', '☆', 'H', 'a'],
    ['c', 'k', '☆', 'e', '☆', 'r'],
    ['L', '☆', 'o', 'o', '☆', 'p'],
    ['S', '☆', 'k', 'y', '☆', 'w'],
    ['a', 'l', '☆', 'k', '☆', '☆'],
    ['☆', 'e', '☆', '☆', 'r', '☆']
];
let newArr = [];
for (i = 0; i < charactersArray.length; i++) {
    for (j = 0; i < charactersArray[i]; j++) {
        }
    }

所以我已经走了这么远,但是在那之后我被卡住了。我需要脱下那个星号特殊字母并返回仅包含字符的新数组。有帮助吗? 我希望数组是多维的,是的。

6 个答案:

答案 0 :(得分:1)

你在这里

let resultAr = charactersArray.map(arr => arr.filter(item => item != "☆"));

使用RegEx添加另一种解决方案以更好地控制包含/排除

let resultAr = charactersArray.map(arr => arr.filter(item => /[^\W]/i.test(item)));

答案 1 :(得分:0)

您还可以简单地使用Array.reduceArray.filter获得所需的结果:

如果您需要一维数组,则可以将过滤后的数组散布到一个新的数组中:

const arr = [ ['☆', 'D', 'a', '☆', '☆', 'r'], ['t', '☆', 'h', '☆', 'H', 'a'], ['c', 'k', '☆', 'e', '☆', 'r'], ['L', '☆', 'o', 'o', '☆', 'p'], ['S', '☆', 'k', 'y', '☆', 'w'], ['a', 'l', '☆', 'k', '☆', '☆'], ['☆', 'e', '☆', '☆', 'r', '☆'] ];

const result = arr.reduce((r,c) => (r.push(...c.filter(x => x !== '☆')), r), [])

console.log(result)

如果您需要相同的尺寸,但没有spread,则过滤后的尺寸相同:

const arr = [ ['☆', 'D', 'a', '☆', '☆', 'r'], ['t', '☆', 'h', '☆', 'H', 'a'], ['c', 'k', '☆', 'e', '☆', 'r'], ['L', '☆', 'o', 'o', '☆', 'p'], ['S', '☆', 'k', 'y', '☆', 'w'], ['a', 'l', '☆', 'k', '☆', '☆'], ['☆', 'e', '☆', '☆', 'r', '☆'] ];

const result = arr.reduce((r,c) => (r.push(c.filter(x => x !== '☆')), r), [])

console.log(result)

可以通过Array.from以更简洁的方式实现相同目的:

const arr = [ ['☆', 'D', 'a', '☆', '☆', 'r'], ['t', '☆', 'h', '☆', 'H', 'a'], ['c', 'k', '☆', 'e', '☆', 'r'], ['L', '☆', 'o', 'o', '☆', 'p'], ['S', '☆', 'k', 'y', '☆', 'w'], ['a', 'l', '☆', 'k', '☆', '☆'], ['☆', 'e', '☆', '☆', 'r', '☆'] ];

const result = Array.from(arr, x => x.filter(y => y != '☆'))

console.log(result)

如果您需要一个字符串:

const arr = [ ['☆', 'D', 'a', '☆', '☆', 'r'], ['t', '☆', 'h', '☆', 'H', 'a'], ['c', 'k', '☆', 'e', '☆', 'r'], ['L', '☆', 'o', 'o', '☆', 'p'], ['S', '☆', 'k', 'y', '☆', 'w'], ['a', 'l', '☆', 'k', '☆', '☆'], ['☆', 'e', '☆', '☆', 'r', '☆'] ];

const result = arr.reduce((a,c) => a.concat(c.filter(x => x !== '☆').join('')), "")

console.log(result)

答案 2 :(得分:0)

鉴于OP的目的,我认为他(她)对reduce / map / filter / ...(至少现在)不感兴趣。只是一个用于处理二维数组的简单for循环。

for (i = 0; i < charactersArray.length; i++) {
    for (j = 0; j < charactersArray[i].length; j++) {
        if(charactersArray[i][j] != "☆") {
            newArr.push(charactersArray[i][j]);
        }
    }
}

答案 3 :(得分:-1)

您可以将Array.prototype.concat()spread operator结合使用以展平二维数组,然后使用Array.prototype.filter()过滤出星星:

const result = [].concat(...charactersArray).filter(c => c !== '☆');

完整代码段:

const charactersArray = [
    ['☆', 'D', 'a', '☆', '☆', 'r'],
    ['t', '☆', 'h', '☆', 'H', 'a'],
    ['c', 'k', '☆', 'e', '☆', 'r'],
    ['L', '☆', 'o', 'o', '☆', 'p'],
    ['S', '☆', 'k', 'y', '☆', 'w'],
    ['a', 'l', '☆', 'k', '☆', '☆'],
    ['☆', 'e', '☆', '☆', 'r', '☆']
];

const result = [].concat(...charactersArray).filter(c => c !== '☆');

console.log(result.join('')); // DarthHackerLoopSkywalker

答案 4 :(得分:-1)

charactersArray.map((a)=>{
    return a.filter((c)=>{
        return c != '☆'});
});

->

[ [ 'D', 'a', 'r' ],
  [ 't', 'h', 'H', 'a' ],
  [ 'c', 'k', 'e', 'r' ],
  [ 'L', 'o', 'o', 'p' ],
  [ 'S', 'k', 'y', 'w' ],
  [ 'a', 'l', 'k' ],
  [ 'e', 'r' ] ]

这就是你想要的吗?

答案 5 :(得分:-1)

这是您可能需要的这项要求

  

我需要摘下那个星号特殊字母并返回一个仅包含字符的新数组。

const charactersArray = [
    ['☆', 'D', 'a', '☆', '☆', 'r'],
    ['t', '☆', 'h', '☆', 'H', 'a'],
    ['c', 'k', '☆', 'e', '☆', 'r'],
    ['L', '☆', 'o', 'o', '☆', 'p'],
    ['S', '☆', 'k', 'y', '☆', 'w'],
    ['a', 'l', '☆', 'k', '☆', '☆'],
    ['☆', 'e', '☆', '☆', 'r', '☆']
];
let newArr = [];
charactersArray.forEach(function(subArrays){
  let subArray = subArrays.filter(subArray => subArray !== '☆');
  subArray.forEach(function(character){
    newArr.push(character);
  });
});
console.log(newArr);