【问题标题】:javascript sort some elements of an array into other arrayjavascript将数组的一些元素排序到另一个数组中
【发布时间】:2020-04-29 21:22:51
【问题描述】:

对于一个项目,我必须对这个包含字符串和数字的数组进行排序。该字符串用作指示该数字应存储到哪个数组中。

let myArray = [22, 'talk', 31, 'perfo', 35, 'init', 42, 'talk']
let talk = []
let perfo = []
let init = []

for (let i = 0; i < myArray.length; i + 2) {
    if (myArray[i + 1] == 'talk') {
        talk.push(myArray[i])
    } else if (myArray[i + 1] == 'perfo') {
        perfo.push(myArray[i])
    } else if (myArray[i + 1] == 'init') {
        init.push(myArray[i])
    } else {}
}

预期结果:

talk [22, 42], perfo [35], init [42]

但不知何故,它似​​乎甚至没有通过 for 循环。

【问题讨论】:

  • 是否有某些原因为什么每次迭代都将i 增加 2?
  • 您的代码工作正常,除了一个小错误 - 使用 i += 2 增加 i
  • 这不叫“排序”,而是“分组”或“拆分”。
  • 另外去掉多余的else {}
  • 谢谢@OriDrori 就是这样

标签: javascript arrays sorting for-loop


【解决方案1】:

对象和数组一样,但是它不是以数字作为索引,而是有一个字符串,因此我们可以使用对象来重构初始数组。

let myArray = [22, 'talk', 31, 'perfo', 35, 'init', 42, 'talk']

let arrays = {}
for (let i = 0; i < myArray.length; i+=2) {
  const arrayName = myArray[i+1];
  
  if (arrays[arrayName]) {
    arrays[arrayName].push(myArray[i])
  } else {
    arrays[arrayName] = [myArray[i]]
  }
}

console.log(arrays);
// [object Object] {
//  init: [35],
//  perfo: [31],
//  talk: [22, 42]
// }

【讨论】:

    【解决方案2】:

    您可以获取一个带有所需数组的对象并将值推送给它。

    let data = [22, 'talk', 31, 'perfo', 35, 'init', 42, 'talk'],
        talk = [],
        perfo = [],
        init = [],
        temp = { talk, perfo, init },
        i = 0;
    
    while (i < data.length) {
        let [value, key] = data.slice(i, i += 2);
        temp[key].push(value);
    }
    
    console.log(talk);
    console.log(perfo);
    console.log(init);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多