我手头的问题是创建一个新对象,该对象的属性是通过从另一个对象复制属性来设置的,具体取决于条件。实际上,它们是同一个对象的值。为了模仿我面临的问题,假设我有以下对象:
var cars = {car1: ['fast', 'solar energy', 'light', 'fossil energy']};
然后我想要属性 car2,它是一个数组,只复制那些带有 'energy' 的字符串项,并从 car1 中删除所有带有 'energy' 的项,如何简洁地做到这一点。
我尝试了以下方法,但对我来说似乎有点复杂,请原谅我,因为我使用的是角度,但答案不必是角度的:
cars['car2'] = [];
angular.forEach(cars['car1'], function(value, key) {
if(cars['car1'][key].indexOf('energy') > -1) {
cars['car2'].push(value);
}
});
angular.forEach(cars['car2'], function(value){
cars['car1'].splice(value);
});
或者谁能解释一下标题所说的内容?
您可以使用 Array#filter()
var cars = {car1: ['fast', 'solar energy', 'light', 'fossil energy']};
var condition = "energy";
var arr = cars.car1;
cars.car1 = arr.filter(c=>!c.includes(condition));
cars.car2 = arr.filter(c=>c.includes(condition));
console.log(cars);
或与 Array#reduce()
var cars = {car1: ['fast', 'solar energy', 'light', 'fossil energy']};
var condition = "energy";
var finalObj = cars.car1.reduce((obj,c) => {
obj.car1 = obj.car1 || [];
obj.car2 = obj.car2 || [];
c.includes(condition) ? obj.car2.push(c) : obj.car1.push(c);
return obj;
}, {});
console.log(finalObj);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句