【问题标题】:JavaScript Trivia: Function to combine two Array sets?JavaScript Trivia:组合两个数组集的函数?
【发布时间】:2010-11-05 14:11:36
【问题描述】:

我有两个对象数组,一个有一组像这样的选项(等式的左侧):

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。

【问题讨论】:

  • 它们是二维数组吗?
  • @Drackir 我还没有听说过 JavaScript 中的二维数组。你的意思是一个数组,哪些项目也是数组?
  • @Dr. Zim 那些结构看起来像 SQL 表,而不是 JavaScript 数组......数组是这样的吗:[“Red”,“Green”,“Blue”]?
  • @Šime Vidas - 没错。能否添加用于填充 AllColorsArray[]SelectedColors[] 数组的 JavaScript 代码?
  • 更像对象数组 [{"id":1,"value":"Red"},{"id":2,"value":"Blue"},{"id" :3,"value":"Green"}] (如果我的语法正确)

标签: javascript jquery arrays


【解决方案1】:

使用jqueryextend,数组是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);

【讨论】:

  • 抱歉这个令人困惑的问题,但您的答案正是我想要的。非常好 var object = $.extend({}, object1, object2);
  • 我很高兴。 extend() 将允许您决定哪个是基本数组,哪个是覆盖默认值的数组 extend(default, your_new_values)
【解决方案2】:

您可能对LINQ to JavaScript 感兴趣。

【讨论】:

  • 非常好的建议。我会试试看!
【解决方案3】:

如果您以这样一种方式设置数组,使索引位于相同的位置,您可以使用二维数组,然后检查每个维度是否相等。像这样的:

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);
}

【讨论】:

  • 这是一种检查方式,最终还是需要的。我希望我可以使用 Projection 创建一个对象数组,其中对象包含两者的所有字段。
  • 使用 for in 循环时,您必须进行 hasOwnProperty 检查,因为 Array.prototype 对象可能已被扩充。
  • Zim - 你可以结合 Elzo Valugi 的建议使用我的建议来获得你想要的东西。我已将其编辑到我的答案中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-27
  • 1970-01-01
  • 1970-01-01
  • 2020-06-13
  • 1970-01-01
  • 1970-01-01
  • 2015-10-21
相关资源
最近更新 更多