javascript拆分数组取决于名称

javascript split array depends on names

本文关键字:取决于 数组 拆分 javascript      更新时间:2023-09-26

我有一个mybooks数组,我想按图书的类别将其分开。

var mybooks = [
    ['novel','BookName1','$20.00'],
    ['novel','BookName2','$24.00'],
    ['novel','BookName3','$34.00'],
    ['novel','BookName4','$31.00'],
    ['novel','BookName4','$38.00'],
    ['Biograph','BookName5','$28.00'],
    ['Biograph','BookName6','$48.00'],
    ['Biograph','BookName7','$50.00']
  ];

我是这样做的。

 for(i=0; i<mybooks.length; i++){
        if ((mybooks[i][0]) == 'novel'){
        var books = mybooks[i];
        console.log(books);
       }
      };

console.log(books)打印

["novel", "BookName1", "$20.00"] 
["novel", "BookName2", "$24.00"]
["novel", "BookName3", "$34.00"]
["novel", "BookName4", "$31.00"] 
["novel", "BookName4", "$38.00"] 

如何使名为"splitted"的全局变量等于books

使函数返回books:

var makeBooks = function(mybooks, type){
  var books=[];
  for(var i=0; i<mybooks.length; i++){
      if ((mybooks[i][0]) === type){
        books.push(mybooks[i]);
      }
  };
  return books;
}
window.splitted = makeBooks(mybooks, 'novel');
var splitted=$.grep(mybooks,function(o){return (o[0]=='novel');});

好吧,我不确定你到底想要什么作为最终结果,但你可以这样做:

var splitted = mybooks.reduce(function (result, book) {
    var cat = book[0];
    if (!result[cat]) {
        result[cat] = [book];
    } else {
        result[cat].push(book);
    }
    return result;
}, {});
console.log(splitted); //all books splitted by categories
console.log(splitted.novel); //array of novels
console.log(splitted.Biograph); //array of Biograph

如果您只是想一次收集一个类别,也可以使用filter函数。

var novels = mybooks.filter(function (book) {
    return book[0] === 'novel';
});

一个相当简单的方法是:

var splitted = mybooks.filter(function(book) {return book[0] == 'novel';});

你可以这样概括它:

var byType = function(type) {return function(book) {return book[0] == type;};};
var bios = mybooks.filter(byType('Biograph'));

您是否试图按图书类别拆分数组?如果是这样的话,最好看看对象文字,而不是

这应该按类型排列您的图书数组:

var mybooks = [
    ['novel','BookName1','$20.00'],
    ['novel','BookName2','$24.00'],
    ['novel','BookName3','$34.00'],
    ['novel','BookName4','$31.00'],
    ['novel','BookName4','$38.00'],
    ['Biograph','BookName5','$28.00'],
    ['Biograph','BookName6','$48.00'],
    ['Biograph','BookName7','$50.00']
  ];
var library = {}
for(i=0; i<mybooks.length; i++){
    var bookType = mybooks[i][0];
    if (typeof library[bookType]=='undefined')  
       library[bookType] = [];
    library[bookType].push(mybooks[i]);
}
console.log(library);