Javascript 在比较期间通过通配符或正则表达式省略多个键
当我想排除json对象中包含一组字符的某些属性时,我该怎么做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
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函数,问题是关于下划线今天进行向下投票的原因是什么?如果你让我知道答案出了什么问题,我会改正的。没有人能从匿名投票中吸取教训。