您如何在 JavaScript 中“反向查找”物件的屬性?例如,假設我有一個物件:
var price = {
water: '$1.00',
beer: '$30.00',
xbox: '$500.00'
}
輸入price.water將回傳'$1.00'。但是,如果我想通過PRICE找出ITEM,而不是按商品的價格,該怎么辦?就像我可以打字,然后得到。這可能嗎?fnToFindItemByPrice('$1.00')'water'
提前致謝。
uj5u.com熱心網友回復:
您可以使用Object.keys和Array.find:
var price = {
water: '$1.00',
beer: '$30.00',
xbox: '$500.00'
}
function findItemByPrice(item){
return Object.keys(price).find(e => price[e] == item)
}
console.log(findItemByPrice('$1.00'))
如果您有多個具有該值的屬性,則可以使用Array.filter:
var price = {
water: '$1.00',
beer: '$30.00',
xbox: '$500.00',
water2: '$1.00',
}
function findItemByPrice(item){
return Object.keys(price).filter(e => price[e] == item)
}
console.log(findItemByPrice('$1.00'))
uj5u.com熱心網友回復:
請記住,與鍵不同,值不是唯一的。
var price = {
water: '$1.00',
beer: '$30.00',
coffee: '$1.00',
xbox: '$500.00'
};
var one_dollar = [];
for (let k in price) {
if (price[k] === '$1.00') {
one_dollar.push(k);
}
}
console.log(one_dollar);
uj5u.com熱心網友回復:
您可以通過使用Object.entries()和for ... of回圈來實作這一點。您的代碼如下所示:
const price = {
water: '$1.00',
beer: '$30.00',
xbox: '$500.00'
}
for (const [key, value] of Object.entries(price)) {
if (value === '$1.00') {
console.log(key);
}
}
$1.00如果您要像@mister wtf所說的那樣獲得超過 1 個值,那么您必須使用它Array.push來獲得它。請參閱下面的示例:
let results = [];
let result;
const price = {
water: '$1.00',
sparklingWater: '$1.00',
beer: '$30.00',
xbox: '$500.00'
}
for (const [key, value] of Object.entries(price)) {
if (value === '$1.00') {
results.push(key);
}
}
if (results.length < 2) {
result = results[0];
} else {
result = results;
}
console.log(result);
希望這有幫助!
uj5u.com熱心網友回復:
那 ?
const f_reverse = obj => Object.entries(obj).reduce((r,[k,v])=>(r[v]=k,r),{})
const price =
{ water : '$1.00'
, beer : '$30.00'
, xbox : '$500.00'
}
const fruits =
{ apples : 'normandy'
, pears : 'italy'
, bananas : 'gabon'
, oranges : 'california'
}
const priceRev = f_reverse(price)
const products = f_reverse(fruits)
console.log( priceRev['$1.00'] ) // -> water
console.log( products.california ) // -> oranges
如果多個鍵具有相同的值:
const f_reverse = obj => Object.entries(obj).reduce((r,[k,v])=>
{
if (!r.hasOwnProperty(v)) r[v] = k
else if (!Array.isArray(r[v])) r[v] = [ r[v], k ]
else r[v].push(k)
return r
},{})
const price =
{ water : '$1.00'
, beer : '$30.00'
, xbox : '$500.00'
, tacos : '$1.00'
, glub : '$1.00'
}
const priceRev = f_reverse(price)
console.log('$1.00->', priceRev['$1.00']) // ['water','tacos','glub']
console.log('$500.00->', priceRev['$500.00']) // 'xbox'
.as-console-wrapper {max-height: 100%!important;top:0 }
對于那些總是喜歡有一個陣列回來的人。
(如果通過鏈接計劃使用Nullish 合并運算子)
const f_reverse = obj =>
Object.entries(obj).reduce((r,[k,v])=>(r[v]??=[],r[v].push(k),r),{})
const price =
{ water : '$1.00'
, beer : '$30.00'
, xbox : '$500.00'
, tacos : '$1.00'
, glub : '$1.00'
}
const priceRev = f_reverse(price)
console.log('$1.00->', priceRev['$1.00']) // ['water','tacos','glub']
console.log('$500.00->', priceRev['$500.00']) // ['xbox']
.as-console-wrapper {max-height: 100%!important;top:0 }
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/414757.html
標籤:
上一篇:從二維向量的映射中回傳在位置[r][c]處具有最大int的元素的鍵
下一篇:更新陣列中物件的屬性時重新渲染
