[英]How to return a boolean value indicating an element of an array of object is empty using javascript or lodash
[英]In JavaScript, how can I return a boolean value indicating whether a key is present in a JSON object?
我有一個相當簡單的問題:在Javascript中如何返回布爾值(如果它在JSON中找到)而不是實際值?
例:
var myJSON = {
"foo" : "bar",
"bar" : "foo"
};
var keyToLookFor = "foo";
var found = myJSON[keyToLookFor];
if (found) {
// I know I can test if the string exists in the if
}
// but is there a way I could just return something like:
return found;
// instead of testing found in the if statement and then returning true?
您必須使用'in'關鍵字進行檢查:
if (keyToLookFor in myJSON) {
}
因此,為了簡化它,您可以使用:
return keyToLookFor in myJSON;
in
運算符可以告訴您對象或其原型鏈中的任何對象是否存在鍵。 hasOwnProperty
函數可以告訴您該對象本身是否存在該鍵(而不是其原型鏈中的任何對象)。
if ("foo" in obj) {
// `obj` or an ancestor has a key called "foo"
}
if (obj.hasOwnProperty("foo")) {
// `obj` has a key called "foo"
}
在你的例子中,你使用哪一個並不重要,因為你的對象只是一個Object
( {}
=> new Object()
),所以它沒有太多的原型鏈。 但它可能是相關的,例如,如果您正在查看已添加到其他對象的自定義屬性,例如:
var a = [1, 2, 3, 4];
a.foo = "testing";
alert("push" in a); // 1. alerts "true"
alert(a.hasOwnProperty("push")); // 2. alerts "false"
alert("foo" in a); // 3. alerts "true"
alert(a.hasOwnProperty("foo")); // 4. alerts "true"
上面的#1警告為true,因為所有數組都從Array.prototype
繼承push
屬性(它指的是將值推送到數組末尾的函數)。 #2警告錯誤,因為push
屬性來自原型,而不是實際上是對象本身。 #3和#4警告為true,因為foo
屬性存在於對象本身上。
你所擁有的不是JSON,它是Javascript Object Literal Notation,其中JSON是一個子集。 您已使用文字(就像“字符串文字”)來創建對象並將其分配給變量。 我只提到這一點,因為對象文字可以包含更多內容(包括函數)並具有更廣泛的語法。 但是,示例中{}
內的部分是有效的JSON,因為您在鍵和值上都使用了雙引號,在任何地方都沒有包含“undefined”,並且不包含任何函數。 :-)
在您的示例中,如果屬性的值為false
,則found
將為false ..即使找到它,所以您不會知道它在那里:)
如果你想繼續使用你的例子(上面提到的問題),你可以使用一個小技巧:
return !!found;
哪個會將找到的轉換為布爾值。
我會選擇這樣做:
return keyToLookFor in myJSON;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.