【问题标题】:creating an object from an alphabetically sorted array where keys are the first letters and values are the strings从按字母顺序排序的数组创建对象,其中键是第一个字母,值是字符串
【发布时间】:2022-01-27 12:50:12
【问题描述】:

我一直在尝试从按字母顺序排序的数组中获取对象输出。

例如,如果我有arr = ['anger', 'apple', 'bowl', 'cat'] 那么我希望我的对象像obj = { a: ['anger', 'apple'], b: ['bowl'], c:['cat']}

到目前为止我有这个,但它不能正常工作。

const p4 = function (arr) {
  let val = {};
  const sortArr = arr.sort();
  for (let i = 0; i < sortArr.length; i++) {
    for (let j = i; j < sortArr.length; j++) {
      if (sortArr[i].charAt(0) == sortArr[j].charAt(0)) {
          val.sortArr[j].charAt(0) =sortArr[j] ;
      }
    }

    return val;
  }
};

【问题讨论】:

  • 对变量属性名称使用[] 表示法

标签: javascript arrays sorting object


【解决方案1】:

你可以使用reduce:

let arr = ['anger', 'apple', 'bowl', 'cat']

const result = arr.reduce((a, b) => {
  let c = b.charAt(0);
  if (a[c]) {
    a[c].push(b)
  } else {
    a[c] = [b];
  }
  return a;
}, {})

console.log(result)

【讨论】:

    【解决方案2】:

    在代码中:

    let val = {};
      const sortArr = arr.sort();
    

    sort 就地排序并返回排序后的数组,因此 sortArrarr 都引用同一个(排序后的)数组。你可以这样做:

      arr.sort()
    

    并在下面使用 arr 代替 sortArr

      for (let i = 0; i < sortArr.length; i++) {
        for (let j = i; j < sortArr.length; j++) {
    

    不需要对数组进行两次处理。您需要做的就是:

    1. 遍历数组中的每个值
    2. 获取值的首字母
    3. 如果 val 对象没有具有该名称的属性,请创建它并为该值分配一个数组
    4. 将字符串压入 val[char] 数组

    例如

    function arrToObj(arr) {
      arr.sort();
      let result = {};
      for (let i=0, c; i<arr.length; i++) {
        c = arr[i].substr(0,1);
        if (!result[c]) {
          result[c] = [];
        }
        result[c].push(arr[i]);
      }
      return result;
    }
    
    let arr = ['anger', 'apple', 'bowl', 'cat']
    
    console.log(arrToObj(arr));

    你也可以用reduce做同样的事情:

    let arr = ['anger', 'apple', 'bowl', 'cat']
    
    let obj = arr.sort().reduce((acc, v) => {
      let c = v.substr(0,1);
      if (!acc[c]) acc[c] = [];
      acc[c].push(v);
      return acc;
    }, {});
    
    console.log(obj);

    【讨论】:

      猜你喜欢
      • 2021-02-18
      • 2013-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多