2

i'm coding a decentralized app and i'm stuck. Here is my problem : i'm calling with async function and return an array with object :

const result = [
{ trait_type: "Neck Gear", value: "1" },
{ trait_type: "Alpha Score", value: "6" },
{ trait_type: "Generation", value: "Gen 0" },];

I need to access the line "Alpha score". I have to check if alpha score exist in this object. So i did this :

async function checkAlpha() {
    try {
        const checkAlphaTxn = await traitsContract.compileAttributes([4]) 
                    .then((result) => {
                        // console.log(result.hasOwnProperty("Alpha Score")) //return false
                        console.log(result) //return array above
                    })
    } catch (error) {
        console.log(error)
    }
}

I wanted to use the .hasOwnProperty() method but it returns to me FALSE. But alpha score value exist.

Thank you in advance for those who can unblock me ! :)

1
  • Alpha Score is not a property of result array, it's the value of one of the properties Commented Jan 28, 2022 at 12:00

2 Answers 2

3

hasOwnProperty checks an object - you have an array of objects where Alpha Score is actually the value of one of the properties of one of the objects

console.log(result.find(r => r.trait_type == "Alpha Score"))
Sign up to request clarification or add additional context in comments.

7 Comments

And there's no duplicate? OP is the first asking about this type of problem?
I have tried your solution, it return in the console : TypeError: results.find is not a function at checkAlpha Maybe because i'm coding with React ?
@Tristan react does not change javascript! If you get that message then results is not an array.
Oh yes that's it ! I tried console.log(typeof results) and it return me STRING. But i don't understand why the answer look like an Array who contains objects...
Try doing JSON.parse on the string before calling find
|
0

hasOwnProperty is used for checking keys like trait_type; not values like 'Alpha Score'.

Instead, you can just find an object for which the value for trait_type is equal to "Alpha Score", and then access the value property of the resulting trait object. You can do this using .find, see: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find?retiredLocale=nl

const getResults = async () => {
  return [
    { trait_type: "Neck Gear", value: "1" },
    { trait_type: "Alpha Score", value: "6" },
    { trait_type: "Generation", value: "Gen 0" }
  ];
};

(async () => {
  const results = await getResults();
  
  const alphaScoreTrait = results.find(t => t.trait_type === "Alpha Score");

  if (!alphaScoreTrait) {
    console.log("No trait found with type 'Alpha Score'");
    return;
  }
  
  console.log(alphaScoreTrait.value); // 6
})();

1 Comment

I have tried this solutions too.. but it return : TypeError: results.find is not a function at checkAlpha I have tried with some() and filter(), they don't work too :(

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.