我有一个看起来像这样的对象:
var myObj: {
2:"None",
20:"A",
31:"A",
32:"A",
Social:"B",
Method:"None"
}
我试图在没有' Social'和'方法'属性。
首先,我尝试在计算属性中删除这样的内容,但它从主对象中删除了属性:
props: ['myObj']
computed: {
filterOut: {
var myObject = this.myObj
delete myVar['Social'];
delete myVar['Method'];
return myObject
}
}
然后我尝试使用过滤器,但它不允许我这样做:
var myObject = this.myObj.filter(key => {
return key != 'Method' || key != 'Social'
})
return myObject
TypeError:this.myObj.filter不是函数
上述对象下面对象的最佳方法是什么?
var myObj: {
2:"None",
20:"A",
31:"A",
32:"A"
}
答案 0 :(得分:3)
只需创建一个没有这些属性的新对象。
有stage 3 proposal的休息/点差属性可以让你这样做:
const {Social, Method, ...newObj} = originalObj;
(然后忽略Social
和Method
常数。)但它仍然只是第3阶段(虽然它已接近第4阶段并且在ES2018中看起来很好;在Chrome和Firefox的最新版本中,它支持没有特殊标记。
请注意,这只会处理拥有的,可枚举的属性。
在ES2015 +中你可以这样做:
const newObj = {};
for (const key of Object.keys(originalObj)) {
if (key != "Social" && key != "Method") {
newObj[key] = originalObj[key];
}
}
或者在ES5中:
var newObj = {};
Object.keys(originalObj).forEach(function(key) {
if (key != "Social" && key != "Method") {
newObj[key] = originalObj[key];
}
});
这两者都处理自己的,可枚举的属性;如果您想要所有非符号属性,请改用Object.getOwnPropertyNames
。
答案 1 :(得分:2)
使用Object.assign创建新对象,然后删除。
var myObj = {
2:"None",
20:"A",
31:"A",
32:"A",
Social:"B",
Method:"None"
};
var new_obj = Object.assign({},myObj); // or use spread operator {...myObj};
delete new_obj.Social;
delete new_obj.Method;
console.log(new_obj);

答案 2 :(得分:1)
您想要的功能是reduce。
尝试这样的事情:
function deleteProperty(object, property) {
return Object.keys(object).reduce((obj, key) => {
obj = obj || {};
if (key !== property) {
return { ...obj, [key]: object[key]};
}
return obj;
})
}
如果你在浏览器中工作或者不想处理babel,你可能需要做这样的事情。请注意以下是未经测试的,上面是功能测试,我几乎每天都使用它。
function deleteProperty(object, property) {
return Object.keys(object).reduce((obj, key) => {
obj = obj || {};
if (key !== property) {
return Object.assign(obj, {[key]: object[key]});
}
return obj;
})
}
答案 3 :(得分:1)
也许这种通用解决方案也可以提供帮助:
var myObj = {
2: "None",
20: "A",
31: "A",
32: "A",
Social: "B",
Method: "None"
}
var filtered = _.pickBy(myObj, (v,k)=> _.toInteger(k))
console.log(filtered)

<script src="https://unpkg.com/lodash"></script>
&#13;