以下是我的样本数据

const data = [{"amount": "600,000", "cover": null, "id": "1", "img": "636e56de36301.1.png", "make": "bmw", "model": "bmw", "name": "APA", "policy": "Motor Insurance", "rate": "6"}, {"amount": "300,000", "cover": null, "id": "2", "img": "63723574a81ce.1.png", "make": "ferrari", "model": "ferrari", "name": "CIC", "policy": "Motor Insurance", "rate": "3"}, {"amount": "450,000", "cover": null, "id": "3", "img": "63723726cb1df.1.png", "make": "audi", "model": "audi", "name": "Mayfair Insurance", "policy": "Motor Insurance", "rate": "4.5"}]

下面是我用来返回id3数组的代码.

const data = [{"amount": "600,000", "cover": null, "id": "1", "img": "636e56de36301.1.png", "make": "bmw", "model": "bmw", "name": "APA", "policy": "Motor Insurance", "rate": "6"}, {"amount": "300,000", "cover": null, "id": "2", "img": "63723574a81ce.1.png", "make": "ferrari", "model": "ferrari", "name": "CIC", "policy": "Motor Insurance", "rate": "3"}, {"amount": "450,000", "cover": null, "id": "3", "img": "63723726cb1df.1.png", "make": "audi", "model": "audi", "name": "Mayfair Insurance", "policy": "Motor Insurance", "rate": "4.5"}]

const id = ['3']

const provider = data.reduce((prv, item) => {
    if(id.includes(item.id)){
      return prv 
    }
    return prv
 });
console.log('This is provider' ,provider);

不幸的是,我得到的返回值是ID为1的数据

输出:

 This is provider {"amount": "600,000", "cover": null, "id": "1", "img": "636e56de36301.1.png", "make": "bmw", "model": "bmw", "name": "APA", "policy": "Motor Insurance", "rate": "6"}

有人能告诉我我做错了什么吗?

推荐答案

如果您的意图是只返回一个可以使用reduce()的对象,但目前,您使用的方法有点错误.

  1. 如果不是,则需要将初始值传递给reduce(),然后reduce Select 数组的第一个元素作为初始值,并从第二个元素开始迭代.所以当条件为false时,它返回数组的第一个元素.所以你需要小心.
  2. 你需要在这里返回item,if(id.includes(item.id)) return item,而不是prev.

以下是.reduce()%的解决方案

const data = [{"amount": "600,000", "cover": null, "id": "1", "img": "636e56de36301.1.png", "make": "bmw", "model": "bmw", "name": "APA", "policy": "Motor Insurance", "rate": "6"}, {"amount": "300,000", "cover": null, "id": "2", "img": "63723574a81ce.1.png", "make": "ferrari", "model": "ferrari", "name": "CIC", "policy": "Motor Insurance", "rate": "3"}, {"amount": "450,000", "cover": null, "id": "3", "img": "63723726cb1df.1.png", "make": "audi", "model": "audi", "name": "Mayfair Insurance", "policy": "Motor Insurance", "rate": "4.5"}]

const id = ['3'];
const provider = data.reduce((prv, item) => {
  if(id.includes(item.id)){
    return item 
  }
return prv
}, {});

console.log(provider);

你也可以用.filter()

const data = [{"amount": "600,000", "cover": null, "id": "1", "img": "636e56de36301.1.png", "make": "bmw", "model": "bmw", "name": "APA", "policy": "Motor Insurance", "rate": "6"}, {"amount": "300,000", "cover": null, "id": "2", "img": "63723574a81ce.1.png", "make": "ferrari", "model": "ferrari", "name": "CIC", "policy": "Motor Insurance", "rate": "3"}, {"amount": "450,000", "cover": null, "id": "3", "img": "63723726cb1df.1.png", "make": "audi", "model": "audi", "name": "Mayfair Insurance", "policy": "Motor Insurance", "rate": "4.5"}]

const id = ['3'];
console.log(data.filter(it => id.includes(it.id)));

Javascript相关问答推荐

如何用显示网格平滑地将元素从一个地方移动到另一个地方?

扫描qr code后出错whatter—web.js

Chart.js 4.4.2,当悬停在一个数据点上时,如何在工具提示中拥有多个数据点/标签?

XSLT处理器未运行

在运行时使用Next JS App Router在服务器组件中运行自定义函数

闭包是将值复制到内存的另一个位置吗?

Angular 形式,从DOM中删除不会删除指定索引处的内容,但会删除最后一项

在使用REACT更改了CSS类之后,无法更改CSS样式

未加载css colored颜色 ,无法将div设置为可见和不可见

从另一个数组中的对应行/键值对更新数组中的键值对对象

按什么顺序接收`storage`事件?

无法设置RazorPay订阅API项目价格

每隔3个项目交替显示,然后每1个项目交替显示

JavaScript -复制到剪贴板在Windows计算机上无效

未捕获的不变违规:即使在使用DndProvider之后也应使用拖放上下文

我怎样才能点击一个元素,并获得一个与 puppeteer 师导航页面的URL?

固定动态、self 调整的优先级队列

如何向内部有文本输入字段的HTML表添加行?

将Windows XP转换为原始数据以在html前端中显示

使用jQuery每隔几秒钟突出显示列表中的不同单词