javascript - 获取数组中属性和特定键值的对象

标签 javascript arrays object

我需要找到数组中所有在“mode”属性中包含颜色“绿色”的对象。

let arr = [
  {
    "type": "One",
    "mode": [{ 
        "color": "blue", 
        "size": "L"
      }
    ]
  }, {
    "type": "Two",
    "mode": [{ 
        "color": "green", 
        "size": "M"
      }
    ]
  },{
    "type": "Three",
    "mode": [{ 
        "color": "green", 
        "size": "L"
      }
    ]
  },{
    "type": "Four",
    "mode": [{ 
        "color": "red", 
        "size": "XS" 
      }
    ]
  }
];
    
    
let result = arr.indexOf(arr.find(function(el,index){
  return el['mode'][0].color === 'green';
}))

console.log(result);

目前我只能获取索引。

我想在输出中得到类似的东西:

     [
       {
        "type": "Two",
        "mode": [{ 
            "color": "green", 
            "size": "M"
          }
        ]
      },{
        "type": "Three",
        "mode": [{ 
            "color": "green", 
            "size": "L"
          }
        ]
      }
    ]

最佳答案

使用Array.prototype.filterArray.prototype.some搜索内部数组

const filterByModeColor = (arr, color) =>
  arr.filter(ob => ob.mode?.some(o => o.color == color));

const myArr = [
  {"type": "One", "mode": [{"color": "blue", "size": "L"}]},
  {"type": "Two", "mode": [{"color": "green", "size": "M"}]},
  {"type": "Three", "mode": [{"color": "green", "size": "L"}]},
  {"type": "Four", "mode": [{"color": "red", "size": "XS"}]}
];

const filtered = filterByModeColor(myArr, "green");
console.log(filtered);

要另外过滤内部 "mode": 数组,请使用 Array.prototype.reduce相反。

const filterByModeColor = (arr, color) => arr.reduce((acc, obj) => {
  const mode = obj.mode.filter(o => o.color === color);
  mode.length && acc.push({...obj, mode});
  return acc;
}, []);

const myArr = [
  {"type": "One", "mode": [{"color": "blue", "size": "L"}, {"color": "green", "size": "L"}]},
  {"type": "Two", "mode": [{"color": "green", "size": "S"}, {"color": "green", "size": "M"}, {"color": "red", "size": "Xl"}]},
  {"type": "Three", "mode": [{"color": "yellow", "size": "L"}, {"color": "blue", "size": "XL"}]},
  {"type": "Four", "mode": [{"color": "red", "size": "XS"}]}
];

const filtered = filterByModeColor(myArr, "green");
console.log(filtered);

关于javascript - 获取数组中属性和特定键值的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74824467/

相关文章:

javascript - Node Js 错误 Module.js 549

java - 将数组列表转换为单个数组

javascript - 比较两个对象以创建一个新对象

javascript - map 未定义 React JS

javascript - Bootstrap - 出现图像加载错误时回退

python - 如何使用 numpy 从当前列中减去前一行列并使用该值在数组中创建一个新维度?

php - 在函数调用后定义数组索引

javascript - Object.keys在IE11中工作的解决方法是什么?

php - JSON 和 PHP 数组

javascript - 滚动到水平 div 中的元素