【问题标题】:concatenate Array Recursively递归连接数组
【发布时间】:2010-07-19 11:46:40
【问题描述】:

我想递归合并数组..

我的代码是:

var allitemorder;
var itemorder;

$('.divclass').each(function () {
      itemorder = $(this).sortable('toArray');
      allitemorder = $.merge([], itemorder);
});

请帮忙。

【问题讨论】:

标签: jquery arrays


【解决方案1】:

您只需要稍作改动,如下所示:

var allitemorder = [], itemorder;

$('.divclass').each(function () {
    itemorder = $(this).sortable('toArray');
    $.merge(allitemorder, itemorder);
});

或更短的:

var allitemorder = [];    
$('.divclass').each(function () {
    $.merge(allitemorder, $(this).sortable('toArray'));
});

$.merge(first, second)second 数组中取出元素并将它们放在 first 中,因此您需要将要累积的数组作为第一个参数传递每次。

【讨论】:

  • 我喜欢简写版。
【解决方案2】:

试试这个:

var array = $('.divclass').map(function () {
      return $(this).sortable('toArray');
}).get();

.map() 中返回一个数组会自动将该数组合并到创建的 jQuery 对象中。然后.get() 检索最终的数组。

【讨论】:

  • 这将返回一个数组数组;)
  • @Nick - 我很确定当.map() 接收到数组时,它会自动将其合并到 jQuery 对象数组中。有一次我实际上想要一个数组数组,我发现我最终只得到了一个数组。
  • 哇,你是对的,这是核心 IMO 中的一个错误,它不应该进行连接,这是对返回数组的不当处理。我也从未尝试过,但这绝对不是预期的结果。为此+1,虽然我实际上希望它会在未来的版本中打破,没有冒犯:)
  • @Nick - 未采取任何措施。 :o) 我想它假设它正在获取一个 DOM 元素或其他东西的数组,因此想要连接。当我遇到它时,这当然是出乎意料的。
【解决方案3】:
allitemorder = $.merge([], itemorder); 

看起来您正在使用 itemorder 重置 allitemorder。 所以不应该是这样吗:

allitemorder = $.merge(allitemorder, itemorder); 

编辑: 正如尼克所说:$.merge(allitemorder, itemorder); 就足够了(无需再次设置变量 allitemorder)。我完全同意他的速记解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-08
    • 2021-03-22
    • 2021-11-30
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 2011-06-06
    • 2017-05-28
    相关资源
    最近更新 更多