簡體   English   中英

Javascript 如果值存在於對象中?

[英]Javascript if a value exists in an object?

我有一個對象:

var car = {
    company: "Honda",
    year: "2011",
    Model: "Brio"
}

我想知道是否存在一個繼承的方法(這是正確的短語嗎?)來檢查給定對象中是否存在一個值,有點像x.hasOwnProperty ,或者if (x in car) 或者,我應該自己寫。

我已經做了一些谷歌搜索,但它們都會導致hasOwnProperty或檢查數組中是否存在值。

編輯以取悅評論中的所有人:我可以想到兩個用例:

  1. 檢查未定義的鍵並報告是哪一個

    if (!car.isInvalid(car, undefined)) validCarsArray.push (car);
  2. 檢查對象中是否存在一般用戶輸入

    var text = searchBox.input; validCarArrays.forEach (function (car) { if (car.hasOwnValue(car, text)) { displayToUserAsResult (car); } });

假設我們開始

const obj = {foo : "bar"};

檢查一個值:

const hasValue = Object.values(obj).includes("bar");

檢查屬性:

// NOTE: Requires obj.toString() if key is a number
const hasProperty = Object.keys(obj).includes("foo");

多層次價值:

function hasValueDeep(json, findValue) {
    const values = Object.values(json);
    let hasValue = values.includes(findValue);
    values.forEach(function(value) {
        if (typeof value === "object") {
            hasValue = hasValue || hasValueDeep(value, findValue);
        }
    })
    return hasValue;
}

多級屬性:

function hasPropertyDeep(json, findProperty) {
    const keys = Object.keys(json);
    let hasProperty = keys.includes((findProperty).toString());
    keys.forEach(function(key) {
        const value = json[key];
        if (typeof value === "object") {
            hasProperty = hasProperty || hasPropertyDeep(value, findProperty);
        }
    })
    return hasProperty;
}

不,沒有內置方法來搜索對象上的值。

這樣做的唯一方法是迭代對象的所有鍵並檢查每個值。 使用即使在舊瀏覽器中也能工作的技術,您可以這樣做:

function findValue(o, value) {
    for (var prop in o) {
        if (o.hasOwnProperty(prop) && o[prop] === value) {
            return prop;
        }
    }
    return null;
}

findValue(car, "2011");    // will return "year"
findValue(car, "2012");    // will return null

注意:這將返回包含搜索值的第一個屬性,即使可能有多個匹配的屬性。 以效率為代價,您可以返回包含所需值的所有屬性的數組。

注意:這使用額外的.hasOwnProperty()檢查作為防止任何將可枚舉屬性添加到Object.prototype代碼的保護措施。 如果沒有這樣的代碼並且您確定永遠不會有,那么可以取消.hasOwnProperty()檢查。

該函數使用Object.keys()並返回與其中具有給定值的對象的按鍵陣列。

Object.keys()方法返回給定對象自己的可枚舉屬性的數組,其順序與for ... in循環提供的順序相同(區別在於 for-in 循環將原型鏈中的屬性枚舉為好)。

 var car = { company: "Honda", year: "2011", Model: "Brio" }; function getKeysWithValue(v, o) { return Object.keys(o).filter(function (k) { return o[k] === v; }); } document.write('<pre>' + JSON.stringify(getKeysWithValue('Honda', car), 0, 4) + '</pre>');

沒有內置函數,但可以使用Object.keys()[].some()

 function hasValue(obj, value) { return Object.keys(obj).some((key) => obj[key] == value); } var car = { company: "Honda", year: "2011", Model: "Brio" } snippet.log('car has Honda: ' + hasValue(car, 'Honda')); snippet.log('car has NotHonda: ' + hasValue(car, 'NotHonda'));
 <script src="https://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

我使用這個函數來檢查 array2 是否包含與 array1 的公共值。

const array1 = ['a','b','c','x'];
const array2 = ['z','y','x'];


function ContainsCommonItem3(arr1, arr2){
        return arr1.some(item => arr2.includes(item));
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM