最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascriptjQuery Array concatenation? - Stack Overflow

programmeradmin3浏览0评论

I have some simple jQuery code:

var response = Array()
$('.task-list').each(function() {
  response.concat(response,$('#' + this.id).sortable('toArray'));
}
);
console.log(response);

The problem I'm having is that I think I'm using concat improperly- the result is an empty array. When I use array push, it works correctly.

I have some simple jQuery code:

var response = Array()
$('.task-list').each(function() {
  response.concat(response,$('#' + this.id).sortable('toArray'));
}
);
console.log(response);

The problem I'm having is that I think I'm using concat improperly- the result is an empty array. When I use array push, it works correctly.

Share Improve this question asked Sep 21, 2011 at 15:33 cjm2671cjm2671 19.5k31 gold badges111 silver badges188 bronze badges 1
  • what are you trying to acplish. Are you trying to add elements to a jQuery object? – John Hartsock Commented Sep 21, 2011 at 15:36
Add a ment  | 

2 Answers 2

Reset to default 5

You have to set response to the newly formed array, as described in the specification. You currently don't use the return value at all.

The specification says that for .concat, the array is not altered, but the new array is returned:

When the concat method is called with zero or more arguments item1, item2, etc., it returns an array containing the array elements of the object followed by the array elements of each argument in order.

Compare with .push, which says the current array is altered, and that something else is returned instead (the new length):

The arguments are appended to the end of the array, in the order in which they appear. The new length of the array is returned as the result of the call.

So:

response = response.concat($('#' + this.id).sortable('toArray'));

Concat returns the concatenated array, you want this instead

response = response.concat($('#' + this.id).sortable('toArray'));

Simple example

var a = [1,2]; 
var b = [3,4]; 

a = a.concat( b ); // result is [1,2,3,4] which is correct 

If you do the following

a = a.concat( a , b ); // result is [1, 2, 1, 2, 3, 4] not what you want. 
发布评论

评论列表(0)

  1. 暂无评论