我有两个对象数组,一个有一组这样的选项(等式的左边):
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插件来做到这一点?必须提供已选中已保存选项的选择列表。
编辑:
它真的在寻找对象数组上的简单SQL操作,但是使用JavaScript。
答案 0 :(得分:2)
使用jquery extend,数组是js中的对象:
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);
答案 1 :(得分:2)
如果以索引位于相同位置的方式设置数组,则可以使用二维数组,然后检查每个维度是否相等。像这样:
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.
}
修改强>
您可以手动循环并检查它们。您甚至可以在必须传递所选颜色数组和所有颜色数组的函数中抛出它。见下面的例子:
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);
}
答案 2 :(得分:2)
您可能会对此LINQ to JavaScript感兴趣。