2010-11-05 4 views
2

У меня есть два массива объекта, один имеет множество вариантов, как это (левая часть уравнения):JavaScript Trivia: функция объединения двух наборов массивов?

Id Value 
1 Red 
2 Blue 
3 Green 

и другое подобное (правая сторона):

Id Value 
3 Green 

и мне нужно «левое соединение» (все левые продукты и соответствующие справа), как это:

Id Value Selected 
1 Red  
2 Blue  
3 Green X 

Я хотел бы создать метод с этой установкой (я ставлю [], чтобы отметить массивы)

var DisplayArray[] = AllColorsArray[].join(SelectedColors[]); 

Есть ли что-то подобное уже или возможно плагин JQuery, который делает это? Необходимо предоставить список выбора с уже отмеченными сохраненными параметрами.

EDIT:

Это действительно ищет простой SQL, как операции на массивах объектов, но с помощью JavaScript.

+0

Являются ли они двумерными массивами? –

+0

@Drackir Я не слышал о двумерных массивах в JavaScript. Вы имеете в виду массив, элементы которого также являются массивами? –

+0

@Dr. Zim Эти структуры выглядят как таблицы SQL, а не массивы JavaScript ... Являются ли массивы такими: [«Красный», «Зеленый», «Синий»]? –

ответ

2

использование JQuery extend, массивы являются объектами в ЯШАХ:

var object1 = { 
    apple: 0, 
    banana: {weight: 52, price: 100}, 
    cherry: 97 
}; 
var object2 = { 
    banana: {price: 200}, 
    durian: 100 
}; 

$.extend(object1, object2); 

В вашем случае будет

var DisplayArray = $.extend(AllColorsArray ,SelectedColors); 
+0

Извините за запутанный вопрос, но ваш ответ - это то, что я ищу. Очень хороший объект var = $ .extend ({}, object1, object2); –

+0

Я рад. extend() позволит вам решить, какой из них является базовым массивом, и который является массивом, который перезаписывает значения по умолчанию (default, your_new_values). –

2

Если вы настроили массивы таким образом, что индексы находятся в одной position, вы можете использовать двумерный массив, а затем проверить, равномерно ли каждое измерение. Что-то вроде этого:

var ary = new Array(); 
ary[0] = new Array("Red","Blue","Green"); 
ary[1] = new Array(null, null, "Green"); 

for (var i in ary[0]) { 
    alert(ary[0][i] == ary[1][i]); //True if they match, false if not. 
}

EDIT
Вы можете вручную перебрать и проверить их. Вы могли бы даже бросить это в функцию, где вам нужно передать выбранные и все цветовые массивы. Ниже, например:

var AllColorsArray = [{"id":1,"value":"Red"},{"id":2,"value":"Blue"},{"id":3,"value":"Green"}]; 
var SelectedColors = [{"id":3,"value":"Green"}]; 
for (var ind in AllColorsArray) { 
    for (var chkind in SelectedColors) { 
    if (SelectedColors[chkind].id == AllColorsArray[ind].id) { 
     AllColorsArray[ind] = $.extend(AllColorsArray[ind], SelectedColors[chkind]); 
     break; 
    } 
    } 
} 
//To test: 
for (var i in AllColorsArray) { 
    alert(AllColorsArray[i].value + ': ' + AllColorsArray[i].selected); 
}
+0

Это способ проверки, который в конечном итоге необходим. Я надеюсь, что я могу использовать Projection для создания массива объектов, где объекты содержат все поля из обоих. –

+0

При использовании for для циклов вы должны выполнять проверки 'hasOwnProperty', потому что объект Array.prototype может быть расширен. –

+0

Zim - Ну, вы могли бы использовать мое предложение в сочетании с предложением Элзо Валуги, чтобы получить то, что вы хотите. Я отредактировал его в своем ответе. –

2

Вы могли бы быть заинтересованы в LINQ to JavaScript для такого рода вещи.

+0

Очень хорошее предложение. Я попробую! –

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