2016-10-26 3 views
2

그래서 개체가 있습니다.개체를 반복하고 값을 인쇄하는 JS 함수

var library = { 
    tracks: { t01: { id: "t01", 
       name: "Code Monkey", 
       artist: "Jonathan Coulton", 
       album: "Thing a Week Three" }, 
      t02: { id: "t02", 
       name: "Model View Controller", 
       artist: "James Dempsey", 
       album: "WWDC 2003"}, 
      t03: { id: "t03", 
       name: "Four Thirty-Three", 
       artist: "John Cage", 
       album: "Woodstock 1952"} 
      } 

    } 

나는 그것을 반복하고 객체의 속성 중 일부를 반환하고자합니다. 결과는 있어야하는데 :

t01: Code Monkey by Jonathan Coulton (Thing a Week Three) 
t02: Model View Controller by James Dempsey (WWDC 2003) 
t03: Four Thirty-Three by John Cage (Woodstock 1952) 

나는 다음과 같은 짓을 - 어떤 원하는 결과를 반환합니다 -하지만 운동이 문제를 해결하기 위해 함수를 사용하는 나에게 묻는다 (var에 printTracks을 = 함수() {}) - 나는 그것을하는 법을 모른다.

내 솔루션 : 함수로 내 코드를 변환하는 방법에 대한 아이디어를

var tracks = library.tracks; 
var result = Object.keys(tracks).forEach(function(t) { 
    var str = t + ': ' + tracks[t].name + ' by ' + tracks[t].artist + '  
    (' + tracks[t].album + ')'; 
    console.log(str) 
}) 

감사.

+1

학교 수업이 있습니까? 개발자는 스스로 이런 종류의 문제를 해결할 수 있기를 원합니다. JavaScript 객체의 속성을 열거하거나 반복하려고합니다. – Mic

+1

'function printTracks() {}'... http://eloquentjavascript.net/03_functions.html과 같은 자바 스크립트 튜토리얼을 읽으면 함수에 대해 알 수 있습니다. –

+0

@Mic : 모두가 개발자는 아닙니다. Stackoverflow는 모든 사람을위한 장소입니다. – Sun

답변

0

매개 변수로 속성의 개체를 취하고 필요한 구문 분석/서식 지정을 수행 한 후 문자열을 반환하는 함수만큼 간단 할 수 있습니다. 당신은 기본적으로 이미 로직을 가지고 있지만, 함수에서 랩핑하면 필요한 곳에서 다시 사용할 수 있습니다. 약간의 변경이 이루어 지므로 마지막에 반환 할 수 있도록 result 변수를 작성하십시오. 또한 각 줄의 끝에 \n 개행 문자를 추가합니다.

var library = { 
    tracks: { 
    t01: { 
     id: "t01", 
     name: "Code Monkey", 
     artist: "Jonathan Coulton", 
     album: "Thing a Week Three" 
    }, 
    t02: { 
     id: "t02", 
     name: "Model View Controller", 
     artist: "James Dempsey", 
     album: "WWDC 2003" 
    }, 
    t03: { 
     id: "t03", 
     name: "Four Thirty-Three", 
     artist: "John Cage", 
     album: "Woodstock 1952" 
    } 
    } 
}; 

var printTracks = function (library) { 
    var tracks = library.tracks; 
    var result = ''; 
    Object.keys(tracks).forEach(function (t) { 
    result += t + ': ' + tracks[t].name + ' by ' + tracks[t].artist + ' (' + tracks[t].album + ')\n'; 
    }); 
    return result; 
} 

console.log(printTracks(library)); 
+0

오, 이런. 그게 전부 야. 나는 너무 가까웠다. 나는 (내가 웬일인지) var = empty 문자열을 내가 원하는 결과 문자열로 설정할 수 있다고 생각하지 않았다. 감사! – snailspeed

+0

내가 도와 주면 내 대답을 받아 들일 수 있습니까? – aricallen

0

해결 방법은 문자열을 출력합니다. 출력은 보이는

key1: value1 
key2: value2 

같은 object{}처럼 보인다 있다는. 그래서 결과물이 객체라고 생각합니다. 총

function f(value) { // value is an argument 
 
    console.log(value); 
 
} 
 

 
var v = "This is something you can change"; // CHANGEABLE 
 

 
f(v);

:

arguments있는 function에있다 물건을 일반화

var library = { 
 
    tracks: { 
 
    t01: { 
 
     id: "t01", 
 
     name: "Code Monkey", 
 
     artist: "Jonathan Coulton", 
 
     album: "Thing a Week Three" 
 
    }, 
 
    t02: { 
 
     id: "t02", 
 
     name: "Model View Controller", 
 
     artist: "James Dempsey", 
 
     album: "WWDC 2003" 
 
    }, 
 
    t03: { 
 
     id: "t03", 
 
     name: "Four Thirty-Three", 
 
     artist: "John Cage", 
 
     album: "Woodstock 1952" 
 
    } 
 
    } 
 
} 
 

 
var tracks = library.tracks; 
 

 
function makeCustomObj(obj) { // The argument is obj 
 
    var res = {}; 
 
    Object.keys(obj).forEach(el => { 
 
    res[el] = obj[el].name + " by " + obj[el].artist; 
 
    }); 
 
    return res; 
 
} 
 

 
var r = makeCustomObj(tracks); 
 
console.log(r);

0

문자열의 배열 (예제의 경우) 또는 키와 텍스트의 개체 (두 예제 모두)가 필요할 수 있습니다. 라이브러리 개체가 주어진 경우 :

function buildTracksArray(object) { 
    var tracks = []; 
    for (var k in object) { 
     var track = object[k]; 
     tracks.push(track.id+': '+track.name+' by '+track.artist+' ('+track.album+')'); 
    } 
    return tracks; // Returns array of strings. 
} 

var tracksArray = buildTracksArray(library.tracks); 
console.log(tracksArray); 
/* Output: 
    [ 
     "t01: Code Monkey by Jonathan Coulton (Thing a Week Three)", 
     "t02: Model View Controller by James Dempsey (WWDC 2003)", 
     "t03: Four Thirty-Three by John Cage (Woodstock 1952)" 
    ] 
*/ 

function buildTracksObject(object) { 
    var tracks = {}; 
    for (var k in object) { 
     var track = object[k]; 
     tracks[track.id] = track.name+' by '+track.artist+' ('+track.album+')'; 
    } 
    return tracks; // Returns object of keys and strings. 
} 

var tracksObject = buildTracksObject(library.tracks); 
console.log(tracksObject); 
/* Output: 
    { 
     t01: "Code Monkey by Jonathan Coulton (Thing a Week Three)", 
     t02: "Model View Controller by James Dempsey (WWDC 2003)", 
     t03: "Four Thirty-Three by John Cage (Woodstock 1952)" 
    } 
*/ 
관련 문제