javascript: разбить строку по пробелам и составить список, используя карту и фильтр - PullRequest
1 голос
/ 02 марта 2020

Я пытаюсь разбить строку на список строк. Поскольку эта строка находится внутри списка строк, я не совсем понимаю, как использовать map и filter для достижения sh этого. Вот то, с чем я работаю:

const cars = [    
    [ 'Ford', 'blue'],
    [ 'Mercedez', 'green'],
    [ 'Ford', 'red blue'],
    [ 'Mercedez', 'black green'],
    [ 'Ford', 'red blue purple'],
    [ 'Mercedez', 'black green orange']
]

let results = cars.map(function(carString){
    let result = [];

    // Regular expression to split only on the first white space
    let strings = carString[1].split(/(?<=^\S+)\s/);

    let arrOfStrings = [];

    result.push(carString[0])

    const isUndefined = string => typeOf(string) === undefined;

    // I am not sure how to use map on a condition so here is what I tried
    for (let i = 0; i < carString.length; i++) {
        if (isUndefined == false) {
            arrOfStrings.push(strings[i]);
        }
    }

    result.push(arrOfStrings)

    return result;
  });

console.log(results);

И вот чего я пытаюсь достичь:

[ 'Ford', ['blue'] ],
[ 'Mercedez', ['green'] ],
[ 'Ford', ['red', 'blue'] ],
[ 'Mercedez', ['black', 'green'] ],
[ 'Ford', ['red', 'blue', 'purple'] ],
[ 'Mercedez', ['black', 'green', 'orange'] ]

Ответы [ 4 ]

2 голосов
/ 02 марта 2020

просто так ...

const cars = [    
    [ 'Ford', 'blue'],
    [ 'Mercedez', 'green'],
    [ 'Ford', 'red blue'],
    [ 'Mercedez', 'black green'],
    [ 'Ford', 'red blue purple'],
    [ 'Mercedez', 'black green orange']
]

let bob = cars.map(e=> [e[0], e[1].split(' ')] )


console.log (bob)
1 голос
/ 02 марта 2020

Вы отображаете массив массивов, поэтому ваш аргумент внутри карты - это сам массив.

Так что это должно работать:

const cars = [
  [ 'Ford', 'blue'],
  [ 'Mercedez', 'green'],
  [ 'Ford', 'red blue'],
  [ 'Mercedez', 'black green'],
  [ 'Ford', 'red blue purple'],
  [ 'Mercedez', 'black green orange']
]

let results = cars.map(function (car)  {
  const colorString = car[1];
  const colors = colorString.split(" ");
  return [car[0], colors];
});

Или с более современным синтаксисом ( ES6, поэтому он должен работать, если вы используете const и let):

let results = cars.map(([brand, colorString]) =>
  [brand, colorString.split(" ")]);
0 голосов
/ 02 марта 2020

Вы можете реструктурировать машину и цвета таким образом:

const cars = [    
    [ 'Ford', 'blue'],
    [ 'Mercedez', 'green'],
    [ 'Ford', 'red blue'],
    [ 'Mercedez', 'black green'],
    [ 'Ford', 'red blue purple'],
    [ 'Mercedez', 'black green orange']
]

let results = cars.map(car => {
   const model = car[0];
   const colors = car[1].split(' ');
   return [model, colors];
});
    
console.log(results);

// Or in one line.
results = cars.map(car => [car[0], car[0].split('')]);
0 голосов
/ 02 марта 2020

const cars = [
  ['Ford', 'blue'],
  ['Mercedez', 'green'],
  ['Ford', 'red blue'],
  ['Mercedez', 'black green'],
  ['Ford', 'red blue purple'],
  ['Mercedez', 'black green orange']
]
const result = cars.reduce((acc, x) => {
  const firstElement = x[0];
  let rest = x[1].split(' ')
  return [...acc, [firstElement, rest]]
}, [])

console.log(result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...