2016-12-26 5 views
0

Моя цель состоит в том, чтобы объединить два похожих объекта JSON, чтобы выход имел свое значение, взятое из предоставленных json объектов. Например:Объединение 2 подобных JSON

var obj1 = {'name': 'xyz', 'age':''}, obj2 = {'name':'', 'age':'66'} 
//would like to have some functionality like below that gives me the output 
obj3 = combine(obj1,obj2) 
//desired output below. 
obj3 = {'name': 'xyz', 'age':'66'} 
+3

'obj2 = {имя: '': возраст: '66' } 'является неправильный формат JSON –

+0

Если вы решили опубликовать что-нибудь на SO убедитесь, что он правильно отформатирован первым. Downvoted пока вы это сделаете. –

+0

@Mayank Pandeyz Вы должны извиниться за OP за этот вводящий в заблуждение код, который, к счастью, уже удален. –

ответ

1

Так вы говорите, что два объекта похожи, я буду считать, что это означает, что для тех ключей, которые являются общими для двух объектов, у которых есть данные, а у других есть ''.

Второе предположение, которое я собираюсь сделать, состоит в том, что для любых ключей, не общих для обоих объектов, которые вы хотите скопировать, как и для нового объекта.

var obj1 = {'a': 'b', 'c': ''}; 
var obj2 = {'a': '', 'c': 'd', 'e': 'f'}; 
var obj3 = {}; 
var key; 

for (key in obj1) { 
    if(obj1[key] === '') { 
     obj3[key] = obj2[key]; 
    } else { 
     obj3[key] = obj1[key]; 
    } 
} 

for(key in obj2) { 
    if(!(key in obj3)) { 
     obj3[key] = obj2[key]; 
    } 
} 
+0

Это рабочий код, Пратик. Я соглашусь. –

0

Поскольку вы добавили тег jQuery, я предполагаю, что вы его используете. Если это так, вы можете использовать метод jQuery $.extend.

var obj1 = {'name': 'xyz', 'age':''}, 
    obj2 = {'name':'', 'age':'66'}, 
    obj3 = $.extend(obj1,obj2); 
+1

Я пробовал $ .extend, но это не даст желаемого результата –

+0

Вы верны. Чтобы он работал, у вас не может быть пустых свойств. Попробуйте удалить все из них заранее, как предлагается здесь: http://stackoverflow.com/questions/23774231/how-do-imove-all-null-and-empty-string-values-from-a-json-object – rabelloo

0

Я не совсем уверен в том, что является отвратительным результатом, но этот код должен указывать на вас в правильном направлении. Она копирует значения из obj2 в obj1, если значение имеет значение (с разве пустым или ложным):

combine = function(a, b) { 
var bKeys = Object.keys(b) 
for (var i = 0; i < bKeys.length; i++) { 
    var key = bKeys[i] 
    if (b[key]) { 
    a[key] = b[key] 
    } 
} 
} 
+0

Спасибо Мартину за ваши усилия. Я проверю и ответю. –