2017-05-19 11 views
1

として別の配列を使用してオブジェクトのフィルタアレイは、各従業員は、配列に格納のjavascript:フィルタ

emp1.age=30 
emp1.name="Hang" 
emp2.age=40 
emp2.name="Dang" 
emp3.age=50 
emp3.name="Bang" 

を有する物体であると仮定する。

var orginialArray=[emp1,emp2,emp3]; 

他の文字列でフィルタリングまたはスプライスする必要があります。

どこか私はoriginalArrayと比較する名前の配列を準備し、その後originalArray

var removeElements=["Hang","Dang"] 

から不一致従業員を削除するよ、私はfilterを試みたが、それは、コールバックの文字列を送信し終わると、私が作ることができませんでしたそれは働く

function filterItems(query) { 
    return orginialArray.filter((el) => 
    el.toLowerCase().indexOf(query.toLowerCase()) > -1 
) 
} 
console.log(filterItems(removeElements)); //i know this is wrong 

目的は元の配列をフィルタリングし、名前が削除要素の配列にない従業員のみを持つことです。

スプライスも試しましたが、運もありませんでした。

あなたは(あなたがすでに使用している) Array.filter()メソッドを使用して、現在の従業員の名前が(あなたが Array.indexOf()を使用することにより確認すること)removeNames配列に存在しない場合にのみ、trueを返すことができ

答えて

4

var employees = [ 
 
    {"name": "abc", "age":"34"}, 
 
    {"name": "pqr", "age":"34"}, 
 
    {"name": "xyz", "age":"34"}, 
 
    {"name": "xxx", "age":"34"}, 
 
]; 
 

 
var removeNames = ["xxx"]; 
 

 
// if required, make all removeNames elements lowerCase first 
 
// removeNames = removeNames.map(function(name){ 
 
    // return name.toLowerCase(); 
 
// });//map() 
 

 

 
var filteredEmployees = employees.filter(function(emp){ 
 
    return removeNames.indexOf(emp.name.toLowerCase()) === -1; 
 
});//filter 
 

 
console.log(filteredEmployees);

+1

私は、フィルタリングの従業員で、私はそれを取得できませんでした申し訳ありませんNeverGiveUp161 @ – NeverGiveUp161

+0

を働いたおかげ。削除された従業員を別の配列に保存することを意味しますか?また、別の問題について別の質問を作成して他の人にも役立つはずだと思います。 – NeverGiveUp161

+0

を一致する名前を保存したい場合には、フィルタ内:) –

3

もうすぐです。 queryは、名前の配列である、あなたは現在の従業員の名前は、その配列であるかどうかを確認する必要があるので、 - もしそうなら、新しいリストからその従業員を除外し、そのような:

var emp1 = { 
 
    age: 30, 
 
    name: "Hang" 
 
}; 
 
var emp2 = { 
 
    age: 40, 
 
    name: "Dang" 
 
}; 
 
var emp3 = { 
 
    age: 50, 
 
    name: "Bang" 
 
}; 
 

 
var originalArray = [emp1, emp2, emp3]; 
 
var removeElements = ["hang", "bang"]; 
 
function filterItems(query) { 
 
    return originalArray.filter((employee) => 
 
    query.indexOf(employee.name.toLowerCase()) === -1 
 
) 
 
} 
 
console.log(filterItems(removeElements));

+1

この回答には何も問題はありません。私は個人的にそれを倒立させませんでした。私の推測では、機能的なパラダイムに従っていないという事実のために、あなたは下降音を得るかもしれないということです。 – zfrisch

+0

@doutriforce答えに間違いはありません。私はdownvoteをしませんでした。私はそれが役に立つかもしれないという点で皆さんに同意していませんが、私が言ったように、downvoted whoが答えを見つけられなかったと仮定します。なぜ彼らがそれに価値があると思ったら、彼らはすでにコメントを残していただろうと確信しているからです。 – Nope

+2

@zfrisch私は同意します。私の試みは、OPの元のコードにできるだけ近いコードを保つことでした。 – mhodges

0

この完全なES6アレイ方式のソリューションです。

私はクエリ名ではなく小文字で新しい配列を生成しています。次に、newArrayに含まれる条件を満たさないすべての要素を含む新しい配列を返します。 希望です!

関連する問題