2016-05-08 4 views
0
router.delete('/board', function (req, res, next) { 
var body = req.body; 

if (!isEmpty(body)) { 
    var index = findIndexInList(body); 
    list.splice(index,1); 
    res.sendStatus(200); 
    return; 
} 
list=[]; 
res.sendStatus(200); 
}); 



function findIndexInList(key) { 

    for (var index in list) { 
    var value = list[index]; 
    //value = { '{data:"2"}': '' } TypeOf = Object 
    //key = { '{data:"2"}': '' } TypeOf = Object 
    console.log(value === key); // why false? I think same so TRUE.. 
    if(value === key) { 
     return list.indexOf(value); 
    } 
} 
return undefined; 
} 

こんにちは。 req.bodyに関するいくつかの質問をしましょう。
私は、このようなクロムコンソールサーバー側で

Node.js Express delete req.body not working

(
$.ajax({ 
type: 'delete', 
data : '{data:"2"} 
});) 

として、クライアントからのデータを送信する際に、LIST配列がデータを持っています。
私は同じデータをサーバ側に送りました。偽

例えば



list = [{ '{data:"1"}': '' },{ '{data:"2"}': '' } ]; 
//value = { '{data:"2"}': '' } Type = Object 
//key = { '{data:"2"}': '' } Type = Object 
console.log(value === key); // FALSE 

なぜですか?私は同じオブジェクトとデータだと思うので真実..

+0

'{}!== {}' .... – YOU

+0

質問をよく更新してください。あなたはオブジェクトの比較を求めていますが、タイトルが正しくないためです。 –

答えて

1

これは不可能なjavascriptでObjectsを比較しています。オブジェクトを比較する良い方法はありません。あなたのオブジェクトがメソッドで、シンプルであれば、二重または三重のEQを使用してオブジェクト等式のためのJavaScriptのテストは、それは常に内部参照をチェックする場合はしかし、あなたはJSON文字列

{} !== {} 
key = { '{data:"2"}': '' } 
value = { '{data:"2"}': '' } 
JSON.stringify(key) === JSON.stringify(value) 
0

に変換した後に比較することができます。この

var g = {some: 'thing'} 
console.log({} == {}); 
console.log({a:1} == {a:1}); 
console.log({a:1} == {a:2}); 
console.log({} === {}); 
console.log(g === g); 
console.log(g == g); 

を実行ref here

は、あなたがオブジェクトの内容の平等をテストする必要がある場合は、あなたが見ることができるように、あなたがこのモジュールhttps://github.com/substack/node-deep-equal

のようなものを使用する必要があり、私たちに

false 
false 
false 
false 
true 
true 

を与えるhere 2つの異なるインスタンスが同じ内容を持っているかどうかをあなたに伝えることができます。

また、文字列化されたヒントは、mentionnedとして使用することもできます。