【问题标题】:JS function that iterates over an object and prints values遍历对象并打印值的 JS 函数
【发布时间】:2016-10-26 21:45:24
【问题描述】:

所以,我有一个对象。

 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)
 })

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

【问题讨论】:

  • 这是学校作业?作为开发人员,您希望能够自己解决这类事情。您可能想要枚举或迭代 JavaScript 对象的属性。
  • function printTracks() { <your code here> }... 您可以通过阅读 JavaScript 教程来了解函数,例如 eloquentjavascript.net/03_functions.html
  • @Mic:不是每个人都是开发者。 Stackoverflow 适合所有人。
  • @PeterLeger 我不同意,但也许我们正在使用不同的开发人员定义。我想说任何开发应用程序的人都是开发人员,无论是爱好还是职业。按照我的定义,StackOverflow 只与开发者相关,参与的每个人都是开发者。 OP引用了一个练习,所以我推测他正在努力学习这样做。能够做到这一点的很大一部分是能够独立搜索答案。最大的障碍是知道要搜索什么,这就是为什么我提供了我知道会提供很好示例的特定语言。
  • @Mic:我同意。 OP 在 StackOverflow 上问这个问题,因为他自己无法解决这个问题。我认为应该把提问者带到哪里。

标签: javascript object


【解决方案1】:

它可以像一个函数一样简单,该函数将属性对象作为参数,并在执行您需要的任何解析/格式化后返回字符串。你基本上已经把逻辑写下来了,但是如果你把它包装在一个函数中,你可以在需要的地方重新使用它。这是一个细微的改动,以便您构建一个 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));

【讨论】:

  • 天哪。就是这样。我是如此接近。我只是没有(出于某种原因)弄清楚我可以将我的 var = empty 字符串设置为我想要的结果字符串。谢谢!
【解决方案2】:

您的解决方案输出一个字符串。输出看起来像

key1: value1
key2: value2

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

function 及其 arguments 用于概括 东西:

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);

【讨论】:

    【解决方案3】:

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

    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)"
        }
     */
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      • 1970-01-01
      • 2021-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多