Javascript 按属性筛选出对象(不删除)
我有一个像这样的对象:Javascript 按属性筛选出对象(不删除),javascript,object,ecmascript-6,vue.js,Javascript,Object,Ecmascript 6,Vue.js,我有一个像这样的对象: var myObj: { 2:"None", 20:"A", 31:"A", 32:"A", Social:"B", Method:"None" } function deleteProperty(object, property) { return Object.keys(object).reduce((obj, key) => { obj = obj || {}; if (key !== pr
var myObj: {
2:"None",
20:"A",
31:"A",
32:"A",
Social:"B",
Method:"None"
}
function deleteProperty(object, property) {
return Object.keys(object).reduce((obj, key) => {
obj = obj || {};
if (key !== property) {
return { ...obj, [key]: object[key]};
}
return obj;
})
}
const newObj = {};
for (const key of Object.keys(originalObj)) {
if (key != "Social" && key != "Method") {
newObj[key] = originalObj[key];
}
}
我试图返回不带“Social”和“Method”属性的对象
首先,我尝试在计算属性中这样删除,但它会从主对象中删除属性:
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"
}
你想要的功能是
试着这样做:
var myObj: {
2:"None",
20:"A",
31:"A",
32:"A",
Social:"B",
Method:"None"
}
function deleteProperty(object, property) {
return Object.keys(object).reduce((obj, key) => {
obj = obj || {};
if (key !== property) {
return { ...obj, [key]: object[key]};
}
return obj;
})
}
const newObj = {};
for (const key of Object.keys(originalObj)) {
if (key != "Social" && key != "Method") {
newObj[key] = originalObj[key];
}
}
如果你在浏览器中工作或者不想和巴贝尔打交道,你可能需要这样做。请注意,以下是未测试的,以上是功能测试,我几乎每天都使用它
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;
})
}
你想要的功能是
试着这样做:
var myObj: {
2:"None",
20:"A",
31:"A",
32:"A",
Social:"B",
Method:"None"
}
function deleteProperty(object, property) {
return Object.keys(object).reduce((obj, key) => {
obj = obj || {};
if (key !== property) {
return { ...obj, [key]: object[key]};
}
return obj;
})
}
const newObj = {};
for (const key of Object.keys(originalObj)) {
if (key != "Social" && key != "Method") {
newObj[key] = originalObj[key];
}
}
如果你在浏览器中工作或者不想和巴贝尔打交道,你可能需要这样做。请注意,以下是未测试的,以上是功能测试,我几乎每天都使用它
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;
})
}
只需创建一个没有这些属性的新对象 有一种用于rest/spread属性的方法可以让您这样做:
const {Social, Method, ...newObj} = originalObj;
(然后忽略Social
和Method
常量。)但它仍然只是第3阶段(尽管它已经接近第4阶段,并且在ES2018中看起来不错;在Chrome和Firefox的最新版本中,它都不受特殊标志的支持)
请注意,这将只处理自己的可枚举属性
在ES2015+中,您可以这样做:
var myObj: {
2:"None",
20:"A",
31:"A",
32:"A",
Social:"B",
Method:"None"
}
function deleteProperty(object, property) {
return Object.keys(object).reduce((obj, key) => {
obj = obj || {};
if (key !== property) {
return { ...obj, [key]: object[key]};
}
return obj;
})
}
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
。只需创建一个没有这些属性的新对象
有一种用于rest/spread属性的方法可以让您这样做:
const {Social, Method, ...newObj} = originalObj;
(然后忽略Social
和Method
常量。)但它仍然只是第3阶段(尽管它已经接近第4阶段,并且在ES2018中看起来不错;在Chrome和Firefox的最新版本中,它都不受特殊标志的支持)
请注意,这将只处理自己的可枚举属性
在ES2015+中,您可以这样做:
var myObj: {
2:"None",
20:"A",
31:"A",
32:"A",
Social:"B",
Method:"None"
}
function deleteProperty(object, property) {
return Object.keys(object).reduce((obj, key) => {
obj = obj || {};
if (key !== property) {
return { ...obj, [key]: object[key]};
}
return obj;
})
}
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
。使用Object.assign创建新对象,然后删除
var myObj={
2:“无”,
20:“A”,
31:“A”,
32:“A”,
社会:“B”,
方法:“无”
};
var new_obj=Object.assign({},myObj);//或者使用扩展运算符{…myObj};
删除新的_obj.Social;
删除新的对象方法;
控制台日志(新的_obj)代码>使用Object.assign创建新对象,然后删除
var myObj={
2:“无”,
20:“A”,
31:“A”,
32:“A”,
社会:“B”,
方法:“无”
};
var new_obj=Object.assign({},myObj);//或者使用扩展运算符{…myObj};
删除新的_obj.Social;
删除新的对象方法;
控制台日志(新的_obj)代码>也许这个通用解决方案也有帮助:
var myObj={
2:“无”,
20:“A”,
31:“A”,
32:“A”,
社会:“B”,
方法:“无”
}
var筛选=u0.pickBy(myObj,(v,k)=>0.toInteger(k))
console.log(已过滤)
也许这一通用解决方案也有帮助:
var myObj={
2:“无”,
20:“A”,
31:“A”,
32:“A”,
社会:“B”,
方法:“无”
}
var筛选=u0.pickBy(myObj,(v,k)=>0.toInteger(k))
console.log(已过滤)
你的目标是什么?为什么要保留属性,但却不可见?你能简单地克隆对象并删除克隆上的属性吗?@isherwood你的方法仍然是最简单的,而且有效。基本上,Object.assign({},this.myObj)
。谢谢你的目标是什么?为什么要保留属性,但却不可见?你能简单地克隆对象并删除克隆上的属性吗?@isherwood你的方法仍然是最简单的,而且有效。基本上,Object.assign({},this.myObj)
。ThanksHow这种方法的结果与删除方法不同吗?(我还不清楚OP想要什么,但是…)首先,delete会留下一个空引用,并对有问题的对象进行变异。这将创建一个只具有所需属性的新对象(无突变)(这是OP想要的,删除了特定属性的对象)。假设javascript没有delete操作符,它是无用的@ISherwoodh这种方法的结果与delete方法不同吗?(我还不清楚OP想要什么,但是…)首先,delete会留下一个空引用,并对有问题的对象进行变异。这将创建一个只具有所需属性的新对象(无突变)(这是OP想要的,删除了特定属性的对象)。假设javascript没有delete操作符,那么@isherwoodPerfectly-valid就没用了,不过请注意,从对象中删除属性往往会对其进行去优化,从而使属性访问速度大大降低(相对而言)。不过,大多数时候你并不在意。不过,请注意,从对象中删除属性往往会降低对象的优化程度,使属性访问速度大大降低(相对而言)。但大多数时候你并不在乎。