Проблема с вложенными массивами и доступом к ним - PullRequest
0 голосов
/ 27 декабря 2018

Итак, я как новичок в кодировании в целом, и я собираюсь попробовать буткемпинг кодирования.Поэтому сейчас я пытаюсь подготовиться к «вступительному тесту», который будет сфокусирован на основах 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 голосов
/ 27 декабря 2018

Учитывая цель ОП, я не думаю, что он / она заинтересован в уменьшении / отображении / фильтрации / ... (по крайней мере, прямо сейчас).Просто простой цикл для манипулирования двумерным массивом.

for (i = 0; i < charactersArray.length; i++) {
    for (j = 0; j < charactersArray[i].length; j++) {
        if(charactersArray[i][j] != "☆") {
            newArr.push(charactersArray[i][j]);
        }
    }
}
0 голосов
/ 27 декабря 2018

Вы также можете просто использовать Array.reduce и Array.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)
0 голосов
/ 27 декабря 2018

Вот что вам может понадобиться из этого требования

Мне нужно снять специальную звездочку и вернуть новый массив только с символами.

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);
0 голосов
/ 27 декабря 2018
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' ] ]

Это то, что вы хотите?

0 голосов
/ 27 декабря 2018

Вот, пожалуйста,

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

Добавление еще одного решения с помощью RegEx для более точного контроля включения / исключения

let resultAr = charactersArray.map(arr => arr.filter(item => /[^\W]/i.test(item)));
0 голосов
/ 27 декабря 2018

Вы можете использовать Array.prototype.concat() с оператором распространения , чтобы сгладить двумерный массив, а затем использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...