【问题标题】:Javascript: Sorting Parsed JSON within _.each loopJavascript:在 _.each 循环中对解析的 JSON 进行排序
【发布时间】:2015-04-08 08:22:21
【问题描述】:

var Bible = JSON.parse( fs.readFileSync(bible.json, 'utf8') ); _.each(Bible, function (b, Book) { return Book; });

这会输出圣经中的每一本书的名称(例如创世纪、出埃及记、利未记等)。问题是 JSON 文件中的书籍不按顺序排列。我尝试以各种方式对它们进行排序,但在 _.each 循环中似乎没有任何可能。当我这样做时:

correctlyOrderedList.indexOf(Book) - correctlyOrderedList.indexOf(b);

它正确返回了每个索引的索引,但据我所知,我仍然无法对 ).each 循环中的索引进行排序。有没有办法在 _.each 循环之前对其进行排序,或者有没有办法在其中进行排序?

【问题讨论】:

  • 试试_.each(_.sort(Bible), function(..) {...})

标签: javascript json parsing sorting


【解决方案1】:

您不能在each 中排序,因为那为时已晚。 但是你可以在使用_.each之前进行排序:

var Bible = JSON.parse( fs.readFileSync(bible.json, 'utf8') );
Bible.sort(); // sorts in place
_.each(Bible, function (b, Book) { 
  return Book; 
});

或者将排序后的值作为参数传递给each

var Bible = JSON.parse( fs.readFileSync(bible.json, 'utf8') );
_.each(Bible.sort(), function (b, Book) { 
  return Book; 
});

【讨论】:

  • 这行得通。就我而言,我不得不稍微不同地处理 Bible 变量,因为它是一个对象。在通过几个 for 循环之后,我能够从原始对象生成一个可排序的数组。 var index = []; var correctOrder = canon.OT + canon.NT; for (book in Bible) {index.push([book]);}; for (var b=0, book, bible=[]; book=index[b]; ++b) {bible.push(book[0]);}; bible.sort(function(a, b) {return correctOrder.indexOf(a) - correctOrder.indexOf(b);}); 已排序并准备就绪:_.each(bible, function (Book) {return Book});
  • 这可能比它需要的更混乱,但这是迄今为止我能想到的最好的。我试图让它不那么意大利面。你的答案绝对是我需要的,我只需要弄清楚如何将对象转换为数组(我想这就是我所做的?)。
  • 在查阅了其他一些堆栈溢出的答案后,我发现下划线可以将键放入数组中!很久以前就可以理解这将是巨大的,但我认为这是学习的一部分。这是我的清理版本:_.keys(Bible).sort(function(a, b) {return correctOrder.indexOf(a) - correctOrder.indexOf(b);}); bible.forEach(function getBooks(Book) {return Book});
猜你喜欢
  • 2021-02-27
  • 1970-01-01
  • 2021-12-14
  • 2011-01-21
  • 1970-01-01
  • 1970-01-01
  • 2011-05-12
  • 2013-07-15
相关资源
最近更新 更多