我正在尝试整理一些演示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阵列。
然后拉出的琴弦没有修剪它们的空白区域。
答案 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
代替过滤器。