Skip to content
On this page

数组对象按某一项找最大值最小值

js
/*
 * @params {array} list - 需要处理的数组
 * @params {string} field - 按哪个字段查找
 * @params {number} limit - 最大【0】默认||最小【1】
 * @params {number} onlyField - 只返回查找的field【0】默认||返回全部字段【1】
 *
 * @example
 * const list = [
 *  { id: 1, name: "jack" },
 *  { id: 2, name: "may" },
 *  { id: 3, name: "shawn" },
 *  { id: 4, name: "tony" },
 * ];
 * console.log(findItemByField(list, "id", 1, 1)); //===> { id: 1, name: "jack" }
 * console.log(findItemByField(list, "id", 0, 1)); //===> { id: 4, name: "tony" }
 * console.log(findItemByField(list, "id", 1, 0)); //===> 1
 * console.log(findItemByField(list, "id", 0, 0)); //===> 4
 *
 * */
const list = [
  { id: 1, name: "jack" },
  { id: 2, name: "may" },
  { id: 3, name: "shawn" },
  { id: 4, name: "tony" },
];

const findItemByField = (list, field, limit = 0, onlyField = 0) => {
  let item = list.reduce((p, v) => {
    return (limit ? p[field] > v[field] : p[field] < v[field]) ? v : p;
  });
  return onlyField ? item : item[field];
};

console.log(findItemByField(list, "id", 1, 1)); //===> { id: 1, name: "jack" }
console.log(findItemByField(list, "id", 0, 1)); //===> { id: 4, name: "tony" }
console.log(findItemByField(list, "id", 1, 0)); //===> 1
console.log(findItemByField(list, "id", 0, 0)); //===> 4

Released under the MIT License.