有两个具有相似项的数组,如何在javascript中删除这些项?

有两个具有相似项的数组,如何在javascript中删除这些项?,javascript,Javascript,我手头的问题是创建一个新对象,根据条件,通过从另一个对象复制属性来设置属性。事实上,它们是同一对象的值。为了模拟我面临的问题,假设我有以下对象: var cars = {car1: ['fast', 'solar energy', 'light', 'fossil energy']}; 然后我想让属性car2,它是一个数组,只复制那些带有'energy'的字符串项,并从car1中删除所有带有'energy'的项,如何简洁地执行 我尝试过以下方法,但对我来说似乎有点复杂,请原谅我使用的是angu

我手头的问题是创建一个新对象,根据条件,通过从另一个对象复制属性来设置属性。事实上,它们是同一对象的值。为了模拟我面临的问题,假设我有以下对象:

var cars = {car1: ['fast', 'solar energy', 'light', 'fossil energy']};
然后我想让属性car2,它是一个数组,只复制那些带有'energy'的字符串项,并从car1中删除所有带有'energy'的项,如何简洁地执行

我尝试过以下方法,但对我来说似乎有点复杂,请原谅我使用的是angular,但答案不一定是angular:

            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);
            });

或者有人能解释一下标题所述的内容吗?

您可以使用lodash library。使用loadash,您可以在一行中实现这一点

_.difference([2, 1], [2, 3]);// => [1]


_.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);// => [1.2]


var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
_.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);// => [{ 'x': 2, 'y': 1 }]
您可以使用这些方法中的任何一种。有关详细信息,请查看此链接-

您可以使用
Array\filter()

var-cars={car1:['fast','solar energy','light','fossil energy']};
var条件=“能量”;
var arr=cars.car1;
cars.car1=arr.filter(c=>!c.includes(条件));
cars.car2=arr.filter(c=>c.includes(条件));

控制台.日志(汽车)输出应该是什么?到目前为止您尝试了什么?恐怕您必须更好地解释它。@Weedoze输出应该是:cars={car1:['fast','light',car2:['solar energy','fosil energy']}@谢谢你。我已经添加了它。这不是使用OP提供的示例+OP没有要求Lodash这个问题已经有了公认的答案。不要乞求UPVOLUES。如果你想要UPVOLUES,发布一些好的问题或答案,你自然会得到UPVOLUES。你的答案没有解释,也没有提供OP要求的输出
var cars = { car1: ['fast', 'solar energy', 'light', 'fossil energy'] };

var express=/\s*energy\s*/g;


var car2=cars.car1.map((e,i)=>{
  return e.replace(express,'')

})

console.log(car2)
//["fast", "solar", "light", "fossil"]