이 주제를 다루는 많은 질문/답변이 있습니다. 내 구체적인 사례는 없습니다. 희망 누군가가 도움이 될 수 있습니다자바 스크립트에서 배열 재정렬
var indexes = [24, 48, 32, 7, 11];
그리고 여기에 유사 객체의 배열 :
내가 같은 인덱스의 배열을 가지고
var items = [{
name : "whatever",
selected : false,
loading : true,
progress : 55,
complete : false
},
{
name : "whatever 2",
selected : false,
loading : false,
progress : 100,
complete : true
}];
indexes
배열 대응의 각 정수 items 배열 내의 객체의 실제 색인에 적용됩니다. indexes
에 저장된 인덱스를 가지고있는 항목 배열의 모든 objects
을 위해 내가하고 싶은 무엇
var insertindex = ??
은 다음과 같습니다
마지막으로 나는 항목 배열 내에서 새로운 삽입 위치를 정의하는 변수가 배열을 제거한 다음 제거하고 마지막으로 변수를 insertindex
에 의해 정의 된 지정된 색인에 서로 나란히 놓습니다.
각 색인의 개체를 임시 배열로 복사 한 다음 원래 배열에서 제거하고 마지막으로이 임시 배열을 반복하여 원래 항목 배열에 다시 넣어서 사용하려고 시도했습니다. 새로운 위치에 있지만 정신 벽돌 벽을 치고있는 것처럼 보이며 제대로 작동하지 않습니다.
간단히 요약하면 인덱스 배열에 정의 된 인덱스와 일치하는 items 배열의 모든 객체를 가져 와서 미리 정의 된 인덱스에 다시 삽입하여 items 배열에 다시 넣기 만하면됩니다.
개념적 시각화를 돕기 위해. 앱을 자바 스크립트 파일 관리자로 생각하면 인접하지 않아도되는 여러 파일 선택을 재정렬 할 수 있습니다. 현재 선택을 정의하는 indexes
배열과 파일 목록을 정의하는 items
배열. 마지막으로 rearoderindex
은 선택한 모든 파일을 이동해야하는 새로운 삽입 위치를 정의합니다.
편집 :
function reorder(items, indexes, insertindex){
var offset = 0;
var itemscopy = items.slice(0); //make shallow copy of original array
var temparray = new Array(); // create temporary array to hold pulled out objects
//loop through selected indexes and copy each into temp array
for(var i=0, len=indexes.length; i<len; i++){
array[i] = itemscopy[self.cache.selecteditems[i]];
}
//remove all selected items from items array
for(var i=0, len=indexes.length; i<len; i++){
items.splice(indexes[i], 1);
}
//finally loop through new temp array and insert the items back into the items array at the specified index, increasing the index each iteration using the offset variable.
for(var i=0, len=temparray.length; i<len; i++){
items.splice((insertindex+offset), 0, array[i]);
offset++;
}
}
나는이 꽤 끔찍 알고 있어요 세 번 반복하는 것이 필요하지 않을 것을 : 바로 여기에 제안 된 바와 같이 내가 지금 함께 연주하고있는 코드입니다. 그러나 나는 많은 다른 방법을 시도해 왔습니다. 어떤 것은 한 방향으로 재 배열 할 때, 다른 방향으로 재 배열 할 때, 다른 한 방향으로 재 배열 할 때 작동합니다. 내가 정확성을 가지고 작업하게되면 나중에 함수를 최적화 할 것이라고 생각했습니다.
나는 무언가를 극도로 어리 석거나 완전히 바라보고있을 것임에 틀림 없다. 그러나 내 인생에서 나는 지금 무엇을 해결할 수 없는지 확신한다.
JSFiddle을 만들거나 더 나은 아직은 스플 라이스 코드를 게시하십시오. 그 말은 내게 맞는 궤적처럼 들린다. –