拆分阵列成两个阵列
var arr = ['a', 'b', 'c', 'd', 'e', 'f'];
var point = 'c';
如何可以分割 “ARR” 成两个阵列基于 “点” 变量,如:拆分阵列成两个阵列
['a', 'b']
和
['d', 'e', 'f']
var arr2 = ['a', 'b', 'c', 'd', 'e', 'f'];
arr = arr2.splice(0, arr2.indexOf('c'));
从arr2删除'c':
arr2.splice(0,1);
arr包含前两个元素,arr2包含后三个元素。
这使得一些假设(如arr2将始终包含第一次赋值的'点'),所以根据需要添加一些正确性检查的边界情况。
其实应该是'arr2.indexOf('c')+ 1'。 – Jon 2012-03-29 21:21:06
固定...对于这个特定情况,至少。 – ramblinjan 2012-03-29 21:25:05
http://jsfiddle.net/mendesjuan/8VtBk/
var indexToSplit = arr.indexOf(point);
var first = arr.slice(0, indexToSplit);
var second = arr.slice(indexToSplit + 1);
的indexOf不可用在每一个浏览器,
,但上面的链接有一些可以用来代替
你可以使用一个片段像下面
if (!Array.indexOf) {
Array.prototype.indexOf = function (obj, start) {
for (var i = (start || 0); i < this.length; i++) {
if (this[i] == obj) {
return i;
}
}
return -1;
}
}
试试这个:
var arr = ['a', 'b', 'c', 'd', 'e', 'f'];
var point = 'c';
var idx = arr.indexOf(point);
arr.slice(0, idx) // ["a", "b"]
arr.slice(idx + 1) // ["d", "e", "f"]
另一项建议:
var segments = arr.join('').split(point).map(function(part) {
return part.split('');
});
现在segments
包含数组的数组:
[["a", "b"], ["d", "e", "f"]]
,并可以像
segments[ 0 ]; // ["a", "b"]
segments[ 1 ]; // ["d", "e", "f"]
如果数组包含类似'abc'的东西,这将失败 – 2012-03-29 21:23:22
@JuanMendes:不是。为什么你这么想? – jAndy 2012-03-29 21:25:13
http://jsfiddle.net/mendesjuan/vjZsB/ – 2012-03-29 21:27:01
var arr = ['a', 'b', 'c', 'd', 'e', 'f'];
var point = 'c';
var i = arr.indexOf(point);
var firstHalf, secondHalf, end, start;
if (i>0) {
firstHalf = arr.slice(0, i);
secondHalf = arr.slice(i + 1, arr.length);
}
获得访问210
//这应该让你开始。你能想到你应该测试哪些边缘案例来解决? //当点在数组的开始或结束时会发生什么?
var arr = ['a', 'b', 'c', 'd', 'e', 'f'];
var point = 'c';
Array.prototype.exists = function(search){
for (var i=0; i<this.length; i++) {
if (this[i] == search) return i;
}
return false;
}
if(i=arr.exists(point))
{
var neewArr=arr.splice(i);
neewArr.shift(0);
console.log(arr); // output: ["a", "b"]
console.log(neewArr); // output: ["d", "e", "f"]
}
这是一个example。
你的'exists'函数已经存在,它被称为'indexOf'。 – 2013-01-31 18:59:26
当拆分数组时,您将要创建两个包含您正在拆分的新数组,例如arr1和arr2。为了填充这个阵列,你需要这样做:
var arr1, arr2; // new arrays
int position = 0; // start position of second array
for(int i = 0; i <= arr.length(); i++){
if(arr[i] = point){ //when it finds the variable it stops adding to first array
//starts adding to second array
for(int j = i+1; j <= arr.length; j++){
arr2[position] = arr[j];
position++; //because we want to add from beginning of array i used this variable
}
break;
}
// add to first array
else{
arr1[i] = arr[i];
}
}
有不同的方法可以做到这一点!祝你好运!
分享这个便利功能,我结束后访问此页面。
function chunkArray(arr,n){
var chunkLength = Math.max(arr.length/n ,1);
var chunks = [];
for (var i = 0; i < n; i++) {
if(chunkLength*(i+1)<=arr.length)chunks.push(arr.slice(chunkLength*i, chunkLength*(i+1)));
}
return chunks;
}
使用范例:
chunkArray([1,2,3,4,5,6],2);
//returns [[1,2,3],[4,5,6]]
chunkArray([1,2,3,4,5,6,7],2);
//returns [[1,2,3],[4,5,6,7]]
chunkArray([1,2,3,4,5,6],3);
//returns [[1,2],[3,4],[5,6]]
chunkArray([1,2,3,4,5,6,7,8],3);
//returns [[1,2],[3,4,5],[6,7,8]]
chunkArray([1,2,3,4,5,6,7,8],42);//over chunk
//returns [[1],[2],[3],[4],[5],[6],[7],[8]]
以及我做了两次迭代和一些临时变量,但我希望有一个更快的方法,用更少的代码... – ellabeauty 2012-03-29 21:17:59
将阵列始终组成单字符串的? – paislee 2012-03-29 21:18:49
我建议你编写一个基于“point”变量分割数组的函数。 – 2012-03-29 21:18:53