Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按属性筛选出对象(不删除)_Javascript_Object_Ecmascript 6_Vue.js - Fatal编程技术网

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就没用了,不过请注意,从对象中删除属性往往会对其进行去优化,从而使属性访问速度大大降低(相对而言)。不过,大多数时候你并不在意。不过,请注意,从对象中删除属性往往会降低对象的优化程度,使属性访问速度大大降低(相对而言)。但大多数时候你并不在乎。