JavaScript:按空格拆分字符串并使用map和filter创建列表

3

我正在尝试将一个字符串拆分为字符串列表。由于这个字符串在一个字符串列表中,我不完全理解如何使用map和filter来完成这个任务。以下是我的工作内容:

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'] ]

另外,如果每个数组中的字符串数量不确定,那么如何避免硬编码每个数组中的字符串数量呢? - Oscar Evolves
4个回答

3

简单来说,以这种方式...

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
您正在映射一个数组的数组,因此 map 内部的参数本身就是一个数组。

因此,这应该可以工作:

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

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)


0
你可以这样重新组织汽车和颜色:

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('')]);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接