首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >迭代对象并打印值的JS函数

迭代对象并打印值的JS函数
EN

Stack Overflow用户
提问于 2016-10-27 05:45:25
回答 3查看 66关注 0票数 2

所以,我有一个对象。

代码语言:javascript
复制
 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"}
            }

  }

我想遍历它并返回该对象的一些属性。结果应该是:

代码语言:javascript
复制
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 () {})来解决这个问题--我不知道该怎么做。

我的解决方案是:

代码语言:javascript
复制
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)
 })

感谢任何关于如何将我的代码转换为函数的想法。

EN

回答 3

Stack Overflow用户

发布于 2016-10-27 06:00:11

它可以像一个函数一样简单,该函数将属性对象作为参数,并在执行所需的任何解析/格式化操作后返回字符串。你基本上已经有了逻辑,但是如果你把它包装在一个函数中,你可以在需要的地方重用它。这里有一个细微的改动,这样你就可以构建一个result变量,这样你就可以在最后返回它。我还在每一行的末尾添加了一个\n换行符。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2016-10-27 08:38:01

您的解决方案会输出一个字符串。输出如下所示

代码语言:javascript
复制
key1: value1
key2: value2

一个看起来像object {}的。所以,我认为输出应该是一个对象。

带有argumentsfunction是用来对内容进行泛化的:

代码语言:javascript
复制
function f(value) { // value is an argument
  console.log(value);
}

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

f(v);

总数:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2016-10-27 09:17:30

您可能需要一个字符串数组(如示例中所示)或一个由键和文本组成的对象(这两个示例都显示了)。给定您的库对象:

代码语言:javascript
复制
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)"
    }
 */
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40272616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档