所以,我有一个对象。
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 = function () {})来解决这个问题--我不知道该怎么做。
我的解决方案是:
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)
})感谢任何关于如何将我的代码转换为函数的想法。
发布于 2016-10-27 06:00:11
它可以像一个函数一样简单,该函数将属性对象作为参数,并在执行所需的任何解析/格式化操作后返回字符串。你基本上已经有了逻辑,但是如果你把它包装在一个函数中,你可以在需要的地方重用它。这里有一个细微的改动,这样你就可以构建一个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));发布于 2016-10-27 08:38:01
您的解决方案会输出一个字符串。输出如下所示
key1: value1
key2: value2一个看起来像object {}的。所以,我认为输出应该是一个对象。
带有arguments的function是用来对内容进行泛化的:
function f(value) { // value is an argument
console.log(value);
}
var v = "This is something you can change"; // CHANGEABLE
f(v);
总数:
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);
发布于 2016-10-27 09:17:30
您可能需要一个字符串数组(如示例中所示)或一个由键和文本组成的对象(这两个示例都显示了)。给定您的库对象:
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)"
}
*/https://stackoverflow.com/questions/40272616
复制相似问题