0

次の形式のオブジェクトの配列があります。

obj = { ref: 8, id: "obj-8" }

オブジェクトのrefプロパティを検索することにより、jQuery のgrepメソッドを使用してその配列から項目を返す関数:

function returnObj(arr,r){
    return $.grep(arr, function(elem,index){ return elem.ref == r; })[0];
}

未定義の要素を含む配列に対してこの関数を使用すると ( delete演算子を使用して以前に削除されました)、次のエラーが発生します: Uncaught TypeError: Cannot read property 'ref' of undefined。未定義の要素が見つかりました。

関数が壊れないように変更するにはどうすればよいですか?

4

3 に答える 3

2

現在のアイテムがundefinedであるかどうかを確認するか、特定のオブジェクトが予想される場合は単に「falsey」であるかどうかを確認し、そうである場合は戻りますfalse

function returnObj(arr,r){
    return $.grep(arr, function(elem,index){ 
                           return elem ? elem.ref == r : false;
                       })[0];
}

別のオプションがあります。を使用deleteしてアイテムを削除しているため、.filter存在しない配列メンバーをスキップするネイティブ メソッドを使用できます。

function returnObj(arr,r){
    return arr.filter(function(elem){ elem.ref == r})[0];
}
于 2012-10-03T17:01:59.477 に答える
1

そうでないことを確認してくださいundefined

function returnObj(arr,r){
    return $.grep(arr, function(elem,index){
        return elem ? elem.ref == r : false; 
    })[0];
}
于 2012-10-03T17:02:56.477 に答える
1

未定義のテストを追加するだけでよいと思います。

return $.grep(arr, function(elem,index){ return elem != undefined && elem.ref == r; })[0];

しかし、なぜあなたがを使用しているのかわかりません$.grep。既存のものを使用してArray.filter、同じ結果を得ることができます。

function returnObj(arr,r){
    return arr.filter(function(ele,index){return ele && ele.ref == r;})[0];
}
于 2012-10-03T17:04:23.137 に答える