2017-09-04 1 views
0

나는 Eloquent Javascript를 통해 읽고 있으며 현재 배열 목록과 관련된 연습 문제를 다루고 있으며 반대의 경우도 마찬가지입니다. 운동은 내가 콘솔을 인쇄하기를 원하지만 [10, 20, 30] 인쇄하고 대신 그 이유를 모릅니다. 나는 당신이 변화를하지 않는 것을 주장 할 수도있을 것 같군요,하지만 난에 "PEloquent Javascript : 배열이 값 (listToArray 함수)이 아닌 다른 배열에서 꺼내 진 이유 이해

function arrayToList(arr) { 
 
    let obj = {}; 
 
    for(let i = 0 ; i < arr.length; i++) { 
 
    obj.value = arr.splice(0,1); 
 
    obj.rest = arrayToList(arr); 
 
    } 
 
    return obj; 
 
}; 
 

 
function listToArray(list){ 
 
    let tempArray = []; 
 
    for(var node = list; node; node = node.rest) { 
 
    if (node.rest !== undefined){ 
 
    tempArray.push(node.value); 
 
    \t } 
 
    } 
 
    return tempArray; 
 
}; 
 

 
console.log(listToArray(arrayToList([10, 20, 30])));

ULL"배열의 출력 값을 싶습니다. .join 메서드를 사용하고 내 결과 배열로 밀어 넣으려고 다른 임시 배열을 만들려고했지만 그 이유는 무엇입니까. 여기

내 코드입니다 :

function arrayToList(arr) { 
    let obj = {}; 
    for(let i = 0 ; i < arr.length; i++) { 
    obj.value = arr.splice(0,1); 
    obj.rest = arrayToList(arr); 
    } 
    return obj; 
}; 

function listToArray(list){ 
    let tempArray = []; 
    for(var node = list; node; node = node.rest) { 
    if (node.rest !== undefined){ 
    tempArray.push(node.value); 
    } 
    } 
    return tempArray; 
}; 

console.log(listToArray(arrayToList([10, 20, 30]))); 

사람이 여기에 무슨 일이 일어나고 있는지 설명 할 수 있습니까?

답변

0

'obj.value = arr.splice (0,1);'를 사용하면 ' 키 '값'을 'arr'의 첫 번째 요소 배열로 설정합니다. ,

function arrayToList(arr) { 
    let list = {}; 

    arr.forEach(function (e, i) { 
     list[i] = e; 
    }); 

    return list; 
} 

function listToArray(list) { 
    let array = []; 

    for (let i in list) { 
     array.push(list[i++]); 
    } 

    return array; 
} 

console.log(listToArray(arrayToList([10, 20, 30]))); 
0

Array.splice() 항상 배열을 반환 :이 같은 것 나는 당신의 문제에 더 나은 솔루션 같은 느낌

obj.value = arr.reverse().pop(); 
arr.reverse(); 

: 나는 함께 그 라인을 교체하는 것보다 다른 더 좋은 방법의 확실하지 않다 1 요소 ([10]) 또는 0 요소 ([])이면 문제가되지 않습니다. 대신 Array.shift() 사용

function ArrayToList(array) { 
    let root = {}; 
    // final node in the list is going to be an empty object 
    // since `array.length` will evaluate to `false` 
    if (array.length) { // don't need a cycle here since we're recursing 
     root.value = array.shift(); 
     root.next = ArrayToList(array); 
    } 
    return root; 
} 

function ListToArray(root) { 
    let array = []; 
    while (root) { // `root` will evaluate to `false` if object is empty 
     if (root.value != undefined) array.push(root.value); 
     root = root.next; 
    } 
    return array; 
} 
: 여기

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/shift 더 연구를위한 코드의 작은 정리입니다

관련 문제