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

如何从多个数组中获取值

如何解决如何从多个数组中获取值

我正在尝试在 cypress 中编写测试,我已连接到数据库并创建了一个 selectQuery 以从数据库中选择 marketIds。现在这些值显示在下面,我能够获得第一个数组的值,但不能获得第二个或第三个数组的值。

下面的示例数组

{id: 1,name: apple},{id: 2,name: pear},{id: 3,name: kiwi}

代码

  before(() => {
    cy.task('queryDb',selectMarketQuery).then(function (marketId) {
      const market = marketId;
      const values = Object.values(market[0]);
      const keys = Object.keys(market[0]);
      let result = {};
      let index = 0;
      keys.forEach(() => {
        result[keys[index]] = values[index];
        index++;
      });
      cy.log(result.name);
    });
  });

我得到的结果是苹果。如何获取所有名称而不仅仅是第一个名称

解决方法

假设 marketId 是您列出的三个对象的数组,那么您只需要一个 map() 调用即可返回一个仅包含 name 属性的新数组。

const names = marketId.map(({ name }) => name);

(此处使用 destructuring assignment 访问 name 回调传递的参数中的 map() 属性)

const marketId = [
  { id: 1,name: 'apple' },{ id: 2,name: 'pear' },{ id: 3,name: 'kiwi' }
];

const names = marketId.map(({ name }) => name);

console.log(names);


但看起来您实际上希望返回一个具有按键分组的属性的对象。即:

const result = {
  id: [1,2,3],name: ['apple','pear','kiwi']
}

在这种情况下,您可以使用 reduce() 调用遍历数组,然后遍历每个对象的 Object.entries() 以在累加器中按 key 对它们进行分组。

const marketId = [
  { id: 1,name: 'kiwi' }
];

const result = marketId.reduce((acc,product) => {
  Object.keys(product).forEach(key =>
    (acc[key] = acc[key] || []).push(product[key]));
  return acc;
},{})

console.log(result);

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