简体   繁体   中英

Angular get object from array by Id

I have an array:

this.questions = [
      {id: 1, question: "Do you feel a connection to a higher source and have a sense of comfort knowing that you are part of something greater than yourself?", category: "Spiritual", subs: []},
      {id: 2, question: "Do you feel you are free of unhealthy behavior that impacts your overall well-being?", category: "Habits", subs: []},
      {id: 3, question: "Do you feel you have healthy and fulfilling relationships?", category: "Relationships", subs: []},
      {id: 4, question: "Do you feel you have a sense of purpose and that you have a positive outlook about yourself and life?", category: "Emotional Well-being", subs: []},
      {id: 5, question: "Do you feel you have a healthy diet and that you are fueling your body for optimal health? ", category: "Eating Habits ", subs: []},
      {id: 6, question: "Do you feel that you get enough rest and that your stress level is healthy?", category: "Relaxation ", subs: []},
      {id: 7, question: "Do you feel you get enough physical activity for optimal health?", category: "Exercise ", subs: []},
      {id: 8, question: "Do you feel you practice self-care and go to the doctor regularly?", category: "Medical Maintenance", subs: []},
      {id: 9, question: "Do you feel satisfied with your income and economic stability?", category: "Financial", subs: []},
      {id: 10, question: "Do you feel you do fun things and laugh enough in your life?", category: "Play", subs: []},
      {id: 11, question: "Do you feel you have a healthy sense of balance in this area of your life?", category: "Work-life Balance", subs: []},
      {id: 12, question: "Do you feel a sense of peace and contentment  in your home? ", category: "Home Environment", subs: []},
      {id: 13, question: "Do you feel that you are challenged and growing as a person?", category: "Intellectual Wellbeing", subs: []},
      {id: 14, question: "Do you feel content with what you see when you look in the mirror?", category: "Self-image", subs: []},
      {id: 15, question: "Do you feel engaged at work and a sense of fulfillment with your job?", category: "Work Satisfaction", subs: []}

    ];

I have a function:

getDimensions(id) {    
   //need logic to get object from questions array based on ID.      
}

How can I write a map to get the correct object form the array based on ID?

You can use .filter() or .find() . One difference that filter will iterate over all items and returns any which passes the condition as array while find will return the first matched item and break the iteration.

Example

 var questions = [ {id: 1, question: "Do you feel a connection to a higher source and have a sense of comfort knowing that you are part of something greater than yourself?", category: "Spiritual", subs: []}, {id: 2, question: "Do you feel you are free of unhealthy behavior that impacts your overall well-being?", category: "Habits", subs: []}, {id: 3, question: "Do you feel you have healthy and fulfilling relationships?", category: "Relationships", subs: []}, {id: 4, question: "Do you feel you have a sense of purpose and that you have a positive outlook about yourself and life?", category: "Emotional Well-being", subs: []}, {id: 5, question: "Do you feel you have a healthy diet and that you are fueling your body for optimal health? ", category: "Eating Habits ", subs: []}, {id: 6, question: "Do you feel that you get enough rest and that your stress level is healthy?", category: "Relaxation ", subs: []}, {id: 7, question: "Do you feel you get enough physical activity for optimal health?", category: "Exercise ", subs: []}, {id: 8, question: "Do you feel you practice self-care and go to the doctor regularly?", category: "Medical Maintenance", subs: []}, {id: 9, question: "Do you feel satisfied with your income and economic stability?", category: "Financial", subs: []}, {id: 10, question: "Do you feel you do fun things and laugh enough in your life?", category: "Play", subs: []}, {id: 11, question: "Do you feel you have a healthy sense of balance in this area of your life?", category: "Work-life Balance", subs: []}, {id: 12, question: "Do you feel a sense of peace and contentment in your home? ", category: "Home Environment", subs: []}, {id: 13, question: "Do you feel that you are challenged and growing as a person?", category: "Intellectual Wellbeing", subs: []}, {id: 14, question: "Do you feel content with what you see when you look in the mirror?", category: "Self-image", subs: []}, {id: 15, question: "Do you feel engaged at work and a sense of fulfillment with your job?", category: "Work Satisfaction", subs: []} ]; function getDimensionsByFilter(id){ return questions.filter(x => x.id === id); } function getDimensionsByFind(id){ return questions.find(x => x.id === id); } var test = getDimensionsByFilter(10); console.log(test); test = getDimensionsByFind(10); console.log(test);

getDimensions(id) {
    var obj = questions.filter(function(node) {
        return node.id==id;
    });

    return obj;   
}
// Used In TypeScript For Angular 4+        
const viewArray = [
          {id: 1, question: "Do you feel a connection to a higher source and have a sense of comfort knowing that you are part of something greater than yourself?", category: "Spiritual", subs: []},
          {id: 2, question: "Do you feel you are free of unhealthy behavior that impacts your overall well-being?", category: "Habits", subs: []},
          {id: 3, question: "Do you feel you have healthy and fulfilling relationships?", category: "Relationships", subs: []},
          {id: 4, question: "Do you feel you have a sense of purpose and that you have a positive outlook about yourself and life?", category: "Emotional Well-being", subs: []},
          {id: 5, question: "Do you feel you have a healthy diet and that you are fueling your body for optimal health? ", category: "Eating Habits ", subs: []},
          {id: 6, question: "Do you feel that you get enough rest and that your stress level is healthy?", category: "Relaxation ", subs: []},
          {id: 7, question: "Do you feel you get enough physical activity for optimal health?", category: "Exercise ", subs: []},
          {id: 8, question: "Do you feel you practice self-care and go to the doctor regularly?", category: "Medical Maintenance", subs: []},
          {id: 9, question: "Do you feel satisfied with your income and economic stability?", category: "Financial", subs: []},
          {id: 10, question: "Do you feel you do fun things and laugh enough in your life?", category: "Play", subs: []},
          {id: 11, question: "Do you feel you have a healthy sense of balance in this area of your life?", category: "Work-life Balance", subs: []},
          {id: 12, question: "Do you feel a sense of peace and contentment  in your home? ", category: "Home Environment", subs: []},
          {id: 13, question: "Do you feel that you are challenged and growing as a person?", category: "Intellectual Wellbeing", subs: []},
          {id: 14, question: "Do you feel content with what you see when you look in the mirror?", category: "Self-image", subs: []},
          {id: 15, question: "Do you feel engaged at work and a sense of fulfillment with your job?", category: "Work Satisfaction", subs: []}
    ];

         const arrayObj = any;
         const objectData = any;

          for (let index = 0; index < this.viewArray.length; index++) {
              this.arrayObj = this.viewArray[index];
              this.arrayObj.filter((x) => {
                if (x.id === id) {
                  this.objectData = x;
                }
              });
              console.log('Json Object Data by ID ==> ', this.objectData);
            }
          };

CASE - 1

Using array.filter() We can get an array of objects which will match with our condition.
see the working example.

 var questions = [ {id: 1, question: "Do you feel a connection to a higher source and have a sense of comfort knowing that you are part of something greater than yourself?", category: "Spiritual", subs: []}, {id: 2, question: "Do you feel you are free of unhealthy behavior that impacts your overall well-being?", category: "Habits", subs: []}, {id: 3, question: "1 Do you feel you have healthy and fulfilling relationships?", category: "Relationships", subs: []}, {id: 3, question: "2 Do you feel you have healthy and fulfilling relationships?", category: "Relationships", subs: []}, {id: 3, question: "3 Do you feel you have healthy and fulfilling relationships?", category: "Relationships", subs: []}, {id: 4, question: "Do you feel you have a sense of purpose and that you have a positive outlook about yourself and life?", category: "Emotional Well-being", subs: []}, {id: 5, question: "Do you feel you have a healthy diet and that you are fueling your body for optimal health? ", category: "Eating Habits ", subs: []}, {id: 6, question: "Do you feel that you get enough rest and that your stress level is healthy?", category: "Relaxation ", subs: []}, {id: 7, question: "Do you feel you get enough physical activity for optimal health?", category: "Exercise ", subs: []}, {id: 8, question: "Do you feel you practice self-care and go to the doctor regularly?", category: "Medical Maintenance", subs: []}, {id: 9, question: "Do you feel satisfied with your income and economic stability?", category: "Financial", subs: []}, {id: 10, question: "1 Do you feel you do fun things and laugh enough in your life?", category: "Play", subs: []}, {id: 10, question: "2 Do you feel you do fun things and laugh enough in your life?", category: "Play", subs: []}, {id: 11, question: "Do you feel you have a healthy sense of balance in this area of your life?", category: "Work-life Balance", subs: []}, {id: 12, question: "Do you feel a sense of peace and contentment in your home? ", category: "Home Environment", subs: []}, {id: 13, question: "Do you feel that you are challenged and growing as a person?", category: "Intellectual Wellbeing", subs: []}, {id: 14, question: "Do you feel content with what you see when you look in the mirror?", category: "Self-image", subs: []}, {id: 15, question: "Do you feel engaged at work and a sense of fulfillment with your job?", category: "Work Satisfaction", subs: []} ]; function filter(){ console.clear(); var filter_id = document.getElementById("filter").value; var filter_array = questions.filter(x => x.id == filter_id); console.log(filter_array); }
 button { background: #0095ff; color: white; border: none; border-radius: 3px; padding: 8px; cursor: pointer; } input { padding: 8px; }
 <div> <label for="filter"></label> <input id="filter" type="number" name="filter" placeholder="Enter id which you want to filter"> <button onclick="filter()">Filter</button> </div>

CASE - 2

Using array.find() we can get first matched item and break the iteration.

 var questions = [ {id: 1, question: "Do you feel a connection to a higher source and have a sense of comfort knowing that you are part of something greater than yourself?", category: "Spiritual", subs: []}, {id: 2, question: "Do you feel you are free of unhealthy behavior that impacts your overall well-being?", category: "Habits", subs: []}, {id: 3, question: "1 Do you feel you have healthy and fulfilling relationships?", category: "Relationships", subs: []}, {id: 3, question: "2 Do you feel you have healthy and fulfilling relationships?", category: "Relationships", subs: []}, {id: 3, question: "3 Do you feel you have healthy and fulfilling relationships?", category: "Relationships", subs: []}, {id: 4, question: "Do you feel you have a sense of purpose and that you have a positive outlook about yourself and life?", category: "Emotional Well-being", subs: []}, {id: 5, question: "Do you feel you have a healthy diet and that you are fueling your body for optimal health? ", category: "Eating Habits ", subs: []}, {id: 6, question: "Do you feel that you get enough rest and that your stress level is healthy?", category: "Relaxation ", subs: []}, {id: 7, question: "Do you feel you get enough physical activity for optimal health?", category: "Exercise ", subs: []}, {id: 8, question: "Do you feel you practice self-care and go to the doctor regularly?", category: "Medical Maintenance", subs: []}, {id: 9, question: "Do you feel satisfied with your income and economic stability?", category: "Financial", subs: []}, {id: 10, question: "1 Do you feel you do fun things and laugh enough in your life?", category: "Play", subs: []}, {id: 10, question: "2 Do you feel you do fun things and laugh enough in your life?", category: "Play", subs: []}, {id: 11, question: "Do you feel you have a healthy sense of balance in this area of your life?", category: "Work-life Balance", subs: []}, {id: 12, question: "Do you feel a sense of peace and contentment in your home? ", category: "Home Environment", subs: []}, {id: 13, question: "Do you feel that you are challenged and growing as a person?", category: "Intellectual Wellbeing", subs: []}, {id: 14, question: "Do you feel content with what you see when you look in the mirror?", category: "Self-image", subs: []}, {id: 15, question: "Do you feel engaged at work and a sense of fulfillment with your job?", category: "Work Satisfaction", subs: []} ]; function find(){ console.clear(); var find_id = document.getElementById("find").value; var find_object = questions.find(x => x.id == find_id); console.log(find_object); }
 button { background: #0095ff; color: white; border: none; border-radius: 3px; padding: 8px; cursor: pointer; } input { padding: 8px; width: 200px; }
 <div> <label for="find"></label> <input id="find" type="number" name="find" placeholder="Enter id which you want to find"> <button onclick="find()">Find</button> </div>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM