var arr = ['a', 'b', 'c', 'd', 'e', 'f'];
var point = 'c';
Làm thế nào tôi có thể chia nhỏ các "arr" vào hai mảng dựa trên biến "điểm", như:mảng Chia thành hai mảng
['a', 'b']
và
['d', 'e', 'f']
var arr = ['a', 'b', 'c', 'd', 'e', 'f'];
var point = 'c';
Làm thế nào tôi có thể chia nhỏ các "arr" vào hai mảng dựa trên biến "điểm", như:mảng Chia thành hai mảng
['a', 'b']
và
['d', 'e', 'f']
var arr2 = ['a', 'b', 'c', 'd', 'e', 'f'];
arr = arr2.splice(0, arr2.indexOf('c'));
Để xóa 'c' khỏi arr2:
arr2.splice(0,1);
arr chứa hai phần tử đầu tiên và arr2 chứa ba phần tử cuối cùng.
Điều này làm cho một số giả định (như arr2 sẽ luôn chứa 'điểm' ở lần gán đầu tiên), vì vậy hãy thêm một số kiểm tra tính chính xác cho các trường hợp biên giới nếu cần.
Thực ra phải là 'arr2.indexOf ('c') + 1'. – Jon
Đã sửa lỗi ... cho trường hợp cụ thể này, ít nhất. – ramblinjan
http://jsfiddle.net/mendesjuan/8VtBk/
var indexToSplit = arr.indexOf(point);
var first = arr.slice(0, indexToSplit);
var second = arr.slice(indexToSplit + 1);
indexOf không có sẵn trong tất cả các trình duyệt,
nhưng liên kết ở trên có một cái gì đó mà có thể được sử dụng thay
bạn có thể sử dụng một đoạn như sau
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;
}
}
Hãy thử cái này:
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"]
Tuy nhiên, một gợi ý:
var segments = arr.join('').split(point).map(function(part) {
return part.split('');
});
tại segments
chứa một mảng của mảng:
[["a", "b"], ["d", "e", "f"]]
và có thể được truy cập như
segments[ 0 ]; // ["a", "b"]
segments[ 1 ]; // ["d", "e", "f"]
Điều này sẽ thất bại nếu mảng chứa một cái gì đó như 'abc' –
@JuanMendes: không thực sự. Tại sao bạn nghĩ rằng? – jAndy
http://jsfiddle.net/mendesjuan/vjZsB/ –
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);
}
// điều này sẽ giúp bạn bắt đầu. Bạn có thể nghĩ về những trường hợp cạnh bạn nên kiểm tra để sửa chữa? // điều gì xảy ra khi điểm bắt đầu hoặc kết thúc của mảng?
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"]
}
Đây là example.
Hàm 'exist' của bạn đã tồn tại, nó được gọi là' indexOf'. –
Khi tách mảng bạn sẽ muốn tạo hai mảng mới sẽ bao gồm những gì bạn đang tách, ví dụ arr1 và arr2. Để điền các mảng này, bạn sẽ muốn thực hiện một việc như sau:
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];
}
}
Có nhiều cách khác nhau để thực hiện việc này! chúc may mắn!
Chia sẻ chức năng tiện lợi này mà tôi đã kết thúc sau khi truy cập trang này.
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;
}
sử dụng mẫu:
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]]
tốt tôi đã làm với hai lần lặp và một vài biến tạm thời, nhưng tôi đã hy vọng có một cách nhanh hơn và với mã ít ... – ellabeauty
sẽ các mảng luôn được sáng tác của chuỗi ký tự đơn? – paislee
Tôi đề nghị bạn viết một hàm tách một mảng dựa trên biến "điểm". –