2014-10-29 44 views
-1

我有以下JavaScript对象:过滤特定属性了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运算符并且不更改对象本身。

编辑:如所描述的here,为了不具有if语句和每次过滤的对象与deposition_type值,就会出现问题。

+0

所以,你想复制整个对象,'论文'属性除外? – Cerbrus 2014-10-29 10:14:47

回答

2

如果你想这样做没有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上的属性也将引用同一对象。

+1

对不起,延迟回复,但感谢您的帮助。不胜感激! :) – giokokos 2014-10-31 17:37:56

0

要复制对象,使用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]; 
    } 
} 
0

写克隆方法 cloneObj =函数(ELE,sExcludeProp){ VAR TMP; if(ele instance of Array){tt = {[0; 0; 0; 0}}}; 为(VAR I = 0;我 } } }其他{ TMP = ELE; } 返回TMP; }