Javascript 使用find()在数组中通过对象循环

Javascript 使用find()在数组中通过对象循环,javascript,reactjs,Javascript,Reactjs,在状态.1.extras.miliety中,我有一个包含3个值为1000、2000、3000的对象的数组。我想做一个函数,当用户输入一个介于1和1000之间的数字时,就可以得到对象 { name: '1.000 mileage', mileage: '1.000', description: 'mileage-description', }, 当输入介于1000和2000之间时,您将获得第二个对象, 当

状态.1.extras.miliety
中,我有一个包含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',
            },
          ],
        },
      },
    },
  },
};
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);
}

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

你的职能:

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',
            },
          ],
        },
      },
    },
  },
};
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速度=[800100010011995200029583000];
控制台日志(速度);
var GetMiledge=(速度)=>{
常量里程=[
{
名称:“1000英里”,
里程:'1000',
描述:'里程描述',
},
{
名称:“2000英里”,
里程:'2000',
说明:'里程说明2',
},
{
名称:“3000英里”,
里程:'3000',
说明:'里程说明3',
}
];
返回里程数.find(obj=>parseInt(obj.miliety,10)>=速度);
};

log(speed.forEach(s=>console.log,'object:',getmilines))在您的情况下,考虑到当前的预期输入和里程范围,我认为将其转换为索引实际上更容易、更有效。这里有一个性能基准,演示了这与Rodius的答案之间的差异