微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Array of Array中查找对象

如何解决在Array of Array中查找对象

如果我想要一个示例循环,则可以通过此数组在Items Array中查找特定项目,该如何处理?我提出了这个逻辑,但是没有用

DATA.map((D)=>{
    return D.items.find((item)=>{
       return item.name ==='Blue Beanie'
    })
  })

这是Array,以及如何创建新的ONE数组,其中包括item数组,就像这样:items:[{ 编号:1 名称:“棕边”, 价格:25 }, { 编号:2 名称:“蓝色豆豆” 价格:18 }, { id:3, 名称:“ Adidas NMD”, 价格:220 }, { 编号:4 名称:“ Adidas Yeezy”, 价格:280 } ]

const DATA= [
  {
    id: 1,title: 'Hats',routeName: 'hats',items: [
      {
        id: 1,name: 'brown Brim',price: 25
      },{
        id: 2,name: 'Blue Beanie',price: 18
      }
    ]
  },{
    id: 2,title: 'sneakers',routeName: 'sneakers',items: [
      {
        id: 3,name: 'Adidas NMD',price: 220
      },{
        id: 4,name: 'Adidas Yeezy',price: 280
      }
             ]
  }
];

解决方法

DATA转换为项目列表,然后从该列表中找到所需的项目

const res = DATA.flatMap((D) => D.items).find(
  (item) => item.name === "Brown Brim"
)

const DATA = [
  {
    id: 1,title: "Hats",routeName: "hats",items: [
      {
        id: 1,name: "Brown Brim",price: 25,},{
        id: 2,name: "Blue Beanie",price: 18,],{
    id: 2,title: "Sneakers",routeName: "sneakers",items: [
      {
        id: 3,name: "Adidas NMD",price: 220,{
        id: 4,name: "Adidas Yeezy",price: 280,]

const res = DATA.flatMap((D) => D.items).find(
  (item) => item.name === "Brown Brim"
)

console.log(res)


参考

Array.prototype.flatMap()

,

关于第一个问题“循环遍历此数组以在Items数组中查找特定项” 鉴于它没有以任何方式排序,可以通过遍历DATA数组并在项目内部进行搜索来完成 如果要从“ forEach”范围的外部访问该项目,则必须在外部声明变量

关于第二个问题,在迭代数组时使用reduce函数

注意:您显然可以在遍历数组的同时合并这两个任务,因此无需重复两次。但是为了避免混淆,我分离了逻辑。 另外,如果您确实选择合并任务,则使用reduce并不重要,但与第一个问题的答案非常相似,您可以声明一个缓冲区(例如数组),然后随时将其复制到其中(我会在这方面忽略性能问题

const DATA = [
  {
    id: 1,title: 'Hats',routeName: 'hats',items: [
      {id: 1,name: 'Brown Brim',price: 25},{id: 2,name: 'Blue Beanie',price: 18}
    ]
  },title: 'Sneakers',routeName: 'sneakers',items: [
      {id: 3,name: 'Adidas NMD',price: 220},{id: 4,name: 'Adidas Yeezy',price: 280}
    ]
  }
];

//Question 1
//creating the object that will hold the item
//outside of the 'forEach' scope so we can use it later
let res = {};
const searchRes = DATA.forEach(entry => {
  entry.items.forEach(item => {
    if (item.name === 'Brown Brim')
      //duplicating the item to a variable declared outside of this scope
      res = { ...item
      };
  });
});
console.log(`Q1 - The item we found:`);
console.log(res);

// Question 2
// Merging all object inside the 'items' array using Reduce
const merged = DATA.reduce((acc,curr) =>
  acc.concat(curr.items),[]);
console.log(`Q2 - The merged array:`);
console.log(merged)

,

也许这很有帮助?

const DATA= [
  {id: 1,title:'Hats',routeName:'hats',items:[{id: 1,name:"Brown Brim",price:25},price: 18}]},items: [{id: 3,price: 280}]}
];
console.log(DATA.map(D=>D.items.find(item=>item.name==='Brown Brim'))
                .filter(e=>e))

.map返回与您的条件匹配的元素或undefined,链接的.filter然后删除所有“虚假”元素,即i。 e。所有undefined个。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。