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

时间:2015-07-22 19:17:49

标签: javascript angularjs lodash

我正在尝试整理一些演示lodash功能,而且我遇到了一些奇怪的行为。

我有一系列汽车,加上其他一些非弦元素投入。我想取出数组中的每个元素并将其从汽车数组中删除,检查它是否为字符串,如果是,则删除任何尾随空格,添加'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}}的输出是:

["Volvo","Ford","Toyota","BMW",45,true,false,null]

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

["Saab s","BMW s","Chevrolet s","Hondas"]

请注意,沃尔沃,福特,丰田和宝马(没有尾随的白色空间)没有从汽车阵列中拉出来,多元化,并添加到pluralCars阵列。

然后拉出的琴弦没有修剪它们的空白区域。

1 个答案:

答案 0 :(得分:4)

字符串是不可变的,它们不能被改变。

_.trim会返回字符串,但您只是丢掉了该​​结果。您需要使用

car = lodash.trim(car);

除此之外,您应该将代码简化为

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

没有任何_.pull - 你不想修改vm.cars,你肯定不想在迭代时删除项目,因为这会导致跳过一些。如果您正在查找非字符串值数组,则可以使用_.partition代替过滤器。