2014-10-29 3 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 

Thes 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

Итак, вы хотите скопировать весь объект, за исключением свойства 'thesis'? – Cerbrus

ответ

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

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) { уаг TMP; if (ele instanceof Array) { tmp = []; для (вар я = 0; я } } } еще { TMP = Эле; } возвращение TMP; }

Смежные вопросы