2013-08-26 80 views
0

我有一本mybooks數組,我想按書的類別將其分開。javascript拆分數組取決於名稱

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(書籍)打印

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

我怎樣才能讓一個名爲 'splited' 全局變量等於books

+1

請確保查看我的解決方案。它可能會教你一些JavaScript功能;) – plalx

+0

非常感謝:-) – olo

回答

2

做一個函數返回的書:

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

你是否試圖按書籍類別拆分數組?如果是這樣,這可能是件好事看看object literals代替

+0

謝謝!但需要爲這種情況排列:-) – olo

1

好了,我不知道你想要的最終結果到底是什麼,但你可以做這樣的事情:

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'; 
}); 
1
var splitted=$.grep(mybooks,function(o){return (o[0]=='novel');}); 
1

一個相當簡單的方法是:

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

這應該安排由它的類型你的書數組:

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