Javascript lodash.each和.trim忽略数组元素?

Javascript lodash.each和.trim忽略数组元素?,javascript,angularjs,lodash,Javascript,Angularjs,Lodash,我正试图整合一些演示lodash功能,但我遇到了一些奇怪的行为 我有一个汽车数组,加上一些其他非字符串元素。我想把数组中的每个元素从cars数组中移除,检查它是否是字符串,如果是,删掉所有尾随的空格,添加一个“s”,并将其放入pluralCars数组中 我在一个角度控制器中执行此操作,并在视图中打印出阵列 vm.cars = ['Saab ', 'Volvo', 'BMW ', 'Ford', 'Chevrolet ', 'Toyota', 'Honda', 'BMW', 45, true, f

我正试图整合一些演示lodash功能,但我遇到了一些奇怪的行为

我有一个汽车数组,加上一些其他非字符串元素。我想把数组中的每个元素从cars数组中移除,检查它是否是字符串,如果是,删掉所有尾随的空格,添加一个“s”,并将其放入pluralCars数组中

我在一个角度控制器中执行此操作,并在视图中打印出阵列

vm.cars = ['Saab ', 'Volvo', 'BMW ', 'Ford', 'Chevrolet ', 'Toyota', 'Honda', 'BMW', 45, true, false, null];
vm.pluralCars = [];

lodash.each(vm.cars, function(car) {
  if (lodash.isString(car)) {
    lodash.pull(vm.cars, car);
    lodash.trim(car);
    car = car + 's';
    vm.pluralCars.push(car);
  }
 });
{{cars}}的输出为:

“{{pluralCars}}}”的输出是:

["Saab s","BMW s","Chevrolet s","Hondas"]
请注意,不带尾随空格的沃尔沃、福特、丰田和宝马并没有从cars数组中提取,而是被多重化并添加到pluralCars数组中


然后被拉的绳子没有被修剪空白

字符串是不可变的,不能更改

确实返回一个新字符串,但您只是在丢弃该结果。你需要使用

car = lodash.trim(car);
除此之外,看起来您应该将代码简化为

vm.pluralCars = lodash.map(lodash.filter(vm.cars, lodash.isString), function(car) {
  return lodash.trim(car) + 's';
});

没有任何u.pull-您不想修改vm.cars,当然也不想在迭代时删除项目,因为这将导致跳过一些。如果还要查找非字符串值数组,则可以使用而不是筛选器。

字符串是不可变的,不能更改

确实返回一个新字符串,但您只是在丢弃该结果。你需要使用

car = lodash.trim(car);
除此之外,看起来您应该将代码简化为

vm.pluralCars = lodash.map(lodash.filter(vm.cars, lodash.isString), function(car) {
  return lodash.trim(car) + 's';
});

没有任何u.pull-您不想修改vm.cars,当然也不想在迭代时删除项目,因为这将导致跳过一些。如果您也在寻找非字符串值的数组,可以使用它来代替过滤器。

就是这样做的。我感谢你的帮助;console.logcar,vm.cars;在每个循环中,都会清楚地说明为什么缺少一些值。这就解决了问题。我感谢你的帮助;console.logcar,vm.cars;在每个循环中,都会清楚地说明为什么缺少一些值。