2016-04-26 9 views
3

私はMEAN Stackアプリケーションを作成しており、ビジネスモデルの新しいインスタンスをプッシュするために空の配列が必要なビジネスデータベースを作成しようとしています。空の配列とプッシュされたキーのソートJavaScript

"name"(アルファベット順)と "upVotes"の2つのキーに基づいて、ビジネスのインデックスを並べ替える必要があります。ここで

は私business.serviceファイル(クライアント側)に持っているものです。

var service = { 
    create: create, 
    businesses: [], 
    upVote: upVote, 
    showAllBiz: showAllBiz, 

}; 
function showAllBiz(){ 
    $http.get("/api/businesses") 
    .then(function(res) { 
    service.businesses = res.data; 
    }, function(err) { 
     $log.info(err); 
    }); 
} 
function create(data) { 
    return $http({ 
    method: 'POST', 
    url: '/api/businesses', 
    data: data, 
    headers: { 
     'Content-Type': 'application/json' 
    } 
    }).then(function(res) { 
     service.businesses.push(res.data); 
    }); 
} 

また、私は何もありませんし、バックエンドで()をソートしてみました。私は(私のサービスで)新しいインスタンスの空の配列を必要とするという事実に立ち往生していますが、私はまた、配列内のオブジェクトを利用するために必要

var Business = require("../models/business"); 
var nodemailer = require("nodemailer"); 
var transporter = nodemailer.createTransport(); 
var firstBy  = require("thenby"); 

function index(req, res) { 
if(req.query.search){ 
    Business.find({}).then(function(data) { 
    var reg = new RegExp(req.query.search, "i"); 
    data = data.filter(function(biz) { 
    if(reg.test(biz.name)) return biz 
    }) 

    res.json(data); 
    }, function(err) { 
    res.json(err); 
}); 
} else{ 
    Business.find({}).then(function(data) { 
    res.json(data); 
    }, function(err) { 
    res.json(err); 
    }); 
} 
} 


function create(req, res) { 
var business  = new Business(); 

console.log(req.body); 
business.name    = req.body.name; 
business.address1   = req.body.address1; 
business.address2   = req.body.address2; 
business.email    = req.body.email; 
business.twitterHandle  = req.body.twitterHandle; 
business.upVote   = req.body.upVote; 

business.save(function(err, savedBusiness) { 
if (err) { 
    res.send(err) 
} 

res.json(savedBusiness); 
}); 

:ここのようにそれが見えるものですキーにアクセスするための.sort()メソッド(これは私がソートしたいと思う)です。

私はTeunのthenBy.jsで演奏しましたが、少し深かったです。

私はソート配列とオブジェクトの配列を探そうとしましたが、これは存在する情報をソートするすべての例であり、まだ存在しない情報ではないため、空の配列が必要です。

+0

touche @halfer! – savageblackout

+0

':-)'あなたが気づいていない場合は、編集者が投稿を読んで、それ以外の部分をトリミングしたり、読みやすくしたりすることがあります。ここに修正することはあまりありませんでした! – halfer

+1

甘い!情報ありがとう:-) – savageblackout

答えて

1

私が質問を理解していると仮定して、ここにはいくつかの構成データの要点があります。私はソート機能をもう少し冗長にして(願わくば)読みやすさを向上させました。

ソーターメソッドでは、最初にnameを比較し、次にupVotesを比較してから、オブジェクトの等価性を表すために0を返すことに注意してください。最初にnameとそれに続くupVotesを比較しているので、これはname、次にupVotesのソートに相当します。

let arr = [ 
    { id: 1, name: 'Dominos', upVotes: 21 }, 
    { id: 2, name: 'Pizza Hut', upVotes: 31 }, 
    { id: 3, name: 'Pizza Hut', upVotes: 35 }, 
    { id: 4, name: 'Dominos', upVotes: 61 }, 
    { id: 5, name: 'Dominos', upVotes: 2 }, 
    { id: 6, name: 'Pizza Hut', upVotes: 25 }, 
    { id: 7, name: 'Dominos', upVotes: 10 }, 
    { id: 8, name: 'Pizza Hut', upVotes: 3 } 
]; 

function sorter(a, b) { 
    if (a.name > b.name) 
     return 1; 
    if (a.name < b.name) 
     return -1; 
    if (a.upVotes > b.upVotes) 
     return 1; 
    if (a.upVotes < b.upVotes) 
     return -1; 
    return 0; 
} 

arr.sort(sorter); 

console.log(arr); 
/* [ { id: 7, name: 'Dominos', upVotes: 2 }, 
    { id: 8, name: 'Dominos', upVotes: 10 }, 
    { id: 5, name: 'Dominos', upVotes: 21 }, 
    { id: 6, name: 'Dominos', upVotes: 61 }, 
    { id: 4, name: 'Pizza Hut', upVotes: 3 }, 
    { id: 3, name: 'Pizza Hut', upVotes: 25 }, 
    { id: 1, name: 'Pizza Hut', upVotes: 31 }, 
    { id: 2, name: 'Pizza Hut', upVotes: 35 } ] */ 

[].sort(sorter); // no errors. if the array is empty, the callback will never be run. 
+0

素晴らしい! @dvlsgこれは加工されたデータを持つ配列で動作します。コンソールは適切な順序でログに記録されます。今私はservice.businesses(作成されたビジネスがプッシュされる空の配列)のためにこれを実装したいが、空の配列で終わる。これは私が不明な部分です - データが作成されていない配列をどのように並べるのですか? – savageblackout

+0

空の配列をソートしようとするとエラーがスローされたり、特定のキー( 'name'、' upVotes')が未定義の状況が心配されていますか?ソートする必要があるときに 'service.businesses'にあると期待されるものの正確な例を見るのに役立つかもしれません。 {タイプ:文字列}、 アドレス1:{タイプ:文字列}、 アドレス2:{タイプ:文字列}、 メール:{タイプ – dvlsg

+0

企業のためのモデルは 'のvar businessSchema =新しいmongoose.Schema({ 名です{type:String、required:false}、 twitterHandle:{type:String、required:false}、 upVote:{type:Number、default:0}、 upVoters:[{type:String}] }); ' ですから、service.businessesには、これらのキーを使用してデータベースに追加される新しいビジネスが含まれます。 – savageblackout

関連する問題