簡體   English   中英

從集合中的對象中提取屬性值?

[英]Extract value of property from object in a Set?

例如, SomeItem是對象的模型(在Typescript中將被建模為接口,或者如果我們在無類型的土地上,您可以想象有一個項目具有SomeItem形式。

假設我有一個SetmySet = new Set([{item: SomeItem, selected: true}, ...])

我想檢查itemA: SomeItem是否被選中。

什么是最干凈的方法?

這不起作用:

const isSelected = mySet.has({item: itemA, selected: true});

這也沒有:

const isSelected = Array.from(mySet).includes({item: itemA, selected: true});

我假設以上兩個都不起作用,因為它試圖通過引用而不是值來比較對象。

這確實有效:

let isSelected: boolean;
mySet.forEach(state => {
  if (state.item === itemA) {
    isSelected = state.selected;
  }
});

但是我的直覺告訴我,有一種正確的方法可以做到這一點。

那么, 如何提取集合中對象的屬性值?

比較具有相同屬性的兩個對象僅在它們具有相同的引用時才返回true,我建議比較它們的屬性,因為屬性是原始值。

如果集合包含特定對象,則可以使用某些方法數組進行過濾

 let mySet = new Set([{item: 'SomeItem', selected: true}]); let itemA = "SomeItem"; let isSelected = Array.from(mySet).some(element => element.item === itemA); console.log(isSelected); 

讓我們以這種方式看一下, Set主要返回一個可迭代的。 當然,它們按順序進行哈希處理,就像Map ,但是從數據結構的外觀來看, Map在這里會為您帶來更多好處。

const x = new Set([
    { "foo": 1, selected: true },
    { "bar": 1, selected: false },
    { "baz": 1, selected: false },
    { "barf": 1, selected: false },
]);

現在,要獲得所需的內容,就需要像使用Array.from (或[...x]傳播它)將其轉換為數組並進行迭代,找到它們的鍵一樣。

現在,作為地圖:

const y = new Map();
y.set("foo", { selected: true });
y.set("bar", { selected: false });
y.set("baz", { selected: false });
y.set("barf", { selected: false });

這樣,您只需稍微更改結構即可獲得item1或使用Map鍵的任何內容,並設置所需的任何元素。

y.has("foo"); // true
y.get("foo").selected; //true

因此,如果您想在這里使用,可以輕松獲取可迭代的鍵名並獲取具有所需屬性的Map索引。

暫無
暫無

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

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