从JavaScript对象中筛选特定属性

Filter a specific property out of a JavaScript object

本文关键字:属性 筛选 JavaScript 对象      更新时间:2023-09-26

我有以下JavaScript对象:

Object {article: jQuery.fn.init[11], thesis: jQuery.fn.init[6], chapter: jQuery.fn.init[0], book: jQuery.fn.init[0], proceedings: jQuery.fn.init[0]…}
article: jQuery.fn.init[11]
book: jQuery.fn.init[0]
chapter: jQuery.fn.init[0]
proceedings: jQuery.fn.init[0]
thesis: jQuery.fn.init[6]
translated_title: jQuery.fn.init[1]
__proto__: Object

thesis属性是jQuery对象,更详细地说:

thesis: jQuery.fn.init[6]
0: div#supervisors.thesis-related.supervisors.thesis-related.dynamic-field-list.ui-sortable
1: div.row.thesis-related
2: div.row.thesis-related
3: select#degree_type.form-control.thesis-related.degree_typeform-control.thesis-related
4: input#university.form-control.thesis-related.universityform-control.thesis-related
5: select#license.form-control.thesis-related.licenseform-control.thesis-related
context: document
length: 6
prevObject: jQuery.fn.init[1]
selector: "*[class~="thesis-related"]"
__proto__: Object[0]

我想过滤初始对象,以获得除论文之外的所有属性,但不使用delete运算符,也不更改对象本身。

编辑:问题如下所述出现,目的是不使用if语句,并每次使用deposition_type值筛选对象。

如果您想在没有delete的情况下完成此操作,基本上是对每个属性的复制操作:

var dest = {};
var name;
for (name in source) {
    if (name !== "thesis" && source.hasOwnProperty(name)) {
        dest[name] = source[name];
    }
}

或者,如果你想在上面获得所有ES5:

var dest = Object.keys(source).reduce(function(memo, name) {
    if (name !== "thesis") {
        memo[name] = source[name];
    }
    return memo;
}, {});

请注意,这是一个"肤浅"的副本;如果source上的任何属性引用对象(包括数组),则dest上的该属性也将引用同一对象。

要复制对象,请使用jQuery.extend:

var secondObject = jQuery.extend({}, firstObject);
delete secondObject.thesis;
firstObject.thesis; // still exists
secondObject.thesis; // does not exists

或者重新创建一个对象:

var secondObject = {};
for(var i in firstObject) {
    if(i !== 'thesis' && firstObject.hasOwnProperty(i)) {
        secondObject[i] = firstObject[i];
    }
}

编写一个克隆方法cloneObj=函数(ele,sExcludeProp){var tmp;if(数组的实例){tmp=[];对于(var i=0;i}}}其他{tmp=ele;}返回tmp;}