【问题标题】:Loop in array through objects with find()使用 find() 在数组中循环遍历对象
【发布时间】:2018-04-19 13:27:09
【问题描述】:

state.1.extras.mileage 中,我有一个包含 3 个对象的数组,其值分别为:1000、2000、3000。我想创建一个函数,当用户输入 1 到 1000 之间的数字时,您会得到对象

        {
          name: '1.000 mileage',
          mileage: '1.000',
          description: 'mileage-description',
        },

当输入介于 1000 和 2000 之间时,您将获得第二个对象, 当您输入在 2000 和 3000 之间时,您将获得第三个对象。

这是我目前的功能:

export const getMileageName = (
  state: GlobalState,
  pdbId: ?string = null,
  index?: number = 0,
): string => {
  const mileages = getMileages(state, pdbId);
  if (!mileages || !mileages[index]) {
    throw Error('Couldn\'t find mileage');
  }

  return mileages[index].name;
};

export const getMileageByKilometers = (
  state: GlobalState,
  pdbId: ?string = null,
  kilometers: number,
) => {
  const mileages = getMileages(state, pdbId);
  console.log(mileages);
  return mileages.find([0]);
};




const state = {
  pdb: {
    items: {
      1: {
        extras: {
          duration: [
            {
              name: 'duration-name',
              description: 'duration',
              duration: '40',
            },
          ],
          extra: [
            { name: 'extra' },
          ],
          contract: [
            { name: 'contract' },
          ],
          claimfree: [
            { name: 'claimfree' },
          ],
          mileage: [
            {
              name: '1.000 mileage',
              mileage: '1.000',
              description: 'mileage-description',
            },
            {
              name: '2.000 mileage',
              mileage: '2.000',
              description: 'mileage-description 2',
            },
            {
              name: '3.000 mileage',
              mileage: '3.000',
              description: 'mileage-description 3',
            },
          ],
        },
      },
    },
  },
};

【问题讨论】:

  • 在您的情况下,考虑到当前的预期输入和里程范围,我认为将其转换为索引实际上会更容易和更有效。这是一个性能基准,展示了这与 Rodius 的答案 measurethat.net/Benchmarks/ShowResult/11099 之间的区别

标签: javascript reactjs


【解决方案1】:

您有一个包含三个对象的数组,每个对象都有一个里程值。使用 javascript find 函数,您将获得满足您声明的条件的第一个值。

你的功能:

getObject(speed) {
  const mileage= [
            {
              name: '1000 mileage',
              mileage: '1000',
              description: 'mileage-description',
            },
            {
              name: '2000 mileage',
              mileage: '2000',
              description: 'mileage-description 2',
            },
            {
              name: '3000 mileage',
              mileage: '3000',
              description: 'mileage-description 3',
            }
          ];

  return mileage.find(obj => parseInt(obj.mileage, 10) >= speed);
}

以下片段:

var speed = [800, 1000, 1001, 995, 2000, 2958, 3000];
console.log(speed);
var getMileage = (speed) => {
  const mileage= [
      {
        name: '1000 mileage',
        mileage: '1000',
        description: 'mileage-description',
      },
      {
        name: '2000 mileage',
        mileage: '2000',
        description: 'mileage-description 2',
      },
      {
        name: '3000 mileage',
        mileage: '3000',
        description: 'mileage-description 3',
      }
    ];
    
    return mileage.find(obj => parseInt(obj.mileage, 10) >= speed);
};

console.log(speed.forEach(s => console.log(s, 'object: ', getMileage(s))));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    • 2021-11-16
    • 2016-07-28
    • 2017-01-29
    • 2015-10-15
    相关资源
    最近更新 更多