Javascript 在比较期间通过通配符或正则表达式省略多个键

Javascript 在比较期间通过通配符或正则表达式省略多个键,javascript,json,underscore.js,Javascript,Json,Underscore.js,当我想排除json对象中包含一组字符的某些属性时,我该怎么做 var obj1 = {name: "James", age: 17, creation: "13-02-2016", deletion: "13-04-2016", foo_x:"", foo_y:"", foo_z:""} var obj2 = {name: "Maria", age: 17, creation: "13-02-2016", deletion: "13-04-2016", foo_x:"", foo_y:"", f

当我想排除json对象中包含一组字符的某些属性时,我该怎么做

var obj1 = {name: "James", age: 17, creation: "13-02-2016", deletion: "13-04-2016", foo_x:"", foo_y:"", foo_z:""}
var obj2 = {name: "Maria", age: 17, creation: "13-02-2016", deletion: "13-04-2016", foo_x:"", foo_y:"", foo_z:""}
现在我想删除包含字符串
foo

var result = _.isEqual(
  _.omit(obj1, ['\*foo\*']),
  _.omit(obj2, ['\*foo\*'])
);
像这样的

有什么方法可以做到这一点吗?

在vanilla JS中

这可能不是最好的办法。但是你可以用这种方式来做

  • 过滤具有
    foo
    等的键
  • 基于筛选的键从原始数组中获取键值对
  • 创建最终对象
  • var obj1={name:“James”,年龄:17岁,创建:“13-02-2016”,删除:“13-04-2016”,foo_x:,foo_y:,foo_z:”
    var obj2={姓名:“玛丽亚”,年龄:17岁,创作:“13-02-2016”,删除:“13-04-2016”,foo_x:,foo_y:,foo_z:”;
    var o=Object.keys(obj1).filter(o=>!o.includes('foo')),
    i=o.map(i=>({[i]:obj1[i]})),
    obj=Object.assign({},…i);
    console.log(obj)
    您可以尝试以下操作(它操作相同的对象)

    功能移除道具(obj,道具){
    Object.keys(obj.forEach)((key)=>{
    如果(键indexOf(prop)!=-1)删除对象[key];
    });
    }
    var obj1={姓名:“詹姆斯”,年龄:17岁,创作:“13-02-2016”,删除:“13-04-2016”,foo_x:,foo_y:,foo_z:”;
    移除道具(obj1,“foo”);
    
    控制台日志(obj1)正如您所提到的,您需要使用regex的解决方案,因此您可以:

    var obj1 = {name: "James", age: 17, creation: "13-02-2016", deletion: "13-04-2016", foo_x:"", foo_y:"", foo_z:""}
    var obj2 = {name: "Maria", age: 17, creation: "13-02-2016", deletion: "13-04-2016", foo_x:"", foo_y:"", foo_z:""};
    
    Object.prototype.filterRegex = function(regex) {
        // check if regex is passed
        let filtered = Object.keys(this).filter((key) => !regex.test(key));
        return filtered.reduce((obj, key) => {
            obj[key] = this[key];
            return obj;
        }, {});
    };
    
    obj1.filterRegex(/foo/);
    obj2.filterRegex(/foo/);
    

    您可以传递一个函数以忽略键作为第二个参数:

    const result = _.omit(obj1, (value, key) => key.includes('foo'))
    

    @戈布林,这叫做。Spread语法允许在适当的位置展开iterable,例如数组表达式或字符串,不是吗?omitBy是一个lodash函数,问题是关于下划线今天进行向下投票的原因是什么?如果你让我知道答案出了什么问题,我会改正的。没有人能从匿名投票中吸取教训。