Javascript返回最大的循环

时间:2017-02-03 04:40:53

标签: javascript arrays

当我在元素的第一部分有重复时,我想返回最大的元素。我已对数组进行了排序,它看起来像:

var sortedMyArray = ["4ff02829-df7e/0", "4ff02829-df7e/10", "8c138c02-c139/37", "54be465f-0c03/41", "b2036e03-384f/4", "b2036e03-384f/32", "b2036e03-384f/35"];

我的预期结果是:

["4ff02829-df7e/10", "8c138c02-c139/37", "54be465f-0c03/41", "b2036e03-384f/35"];

到目前为止我的代码是:

for(var i=0;i<sortedMyArray.length;i++){
                    for (var k = i + 1; k < sortedMyArray.length; k++) {
                     if(sortedMyArray[i].split('/')[0] == sortedMyArray[k].split('/')[0]){
                          console.log('First values of element equal so remove the smallest element');

                            if(sortedMyArray[i].split('/')[1]<sortedMyArray[k].split('/')[1]){
                                sortedMyArray.splice(sortedMyArray[i],1);
                            }
                        }
                     }
                  }

3 个答案:

答案 0 :(得分:3)

由于您对数组进行了排序,因此您可以过滤掉具有相同字符串的下一个元素的每个元素,直到'/'

result = sortedMyArray.filter( function ( el, i ) {
    if ( i + 1 === sortedMyArray.length )
        return true;
    return el.split( '/' )[ 0 ] !== sortedMyArray[ i + 1 ].split( '/' )[ 0 ];
} );

这假定您的数组已正确排序,因此您始终希望保留最后一个带有每个前缀的条目。为了以防万一,我建议您仔细检查您的排序是否符合/2/10结尾的案例。

答案 1 :(得分:1)

这使用Array.reduce()将每个元素的第一部分和完整元素作为键/值对放入对象中。当存在重复键时,它会比较斜杠后的值以存储较大的值。然后返回数组中的所有值。

var sortedMyArray = ["4ff02829-df7e/0", "4ff02829-df7e/10", "8c138c02-c139/37", "54be465f-0c03/41", "b2036e03-384f/4", "b2036e03-384f/32", "b2036e03-384f/35"];

var reduced = Object.values(sortedMyArray.reduce((acc, val) => {
  const [ preSlash, postSlash ] = val.split('/');

  if (acc[preSlash]) {
    const stored = acc[preSlash].slice(acc[preSlash].indexOf('/'));
    return postSlash > stored
        ? Object.assign(acc, { [preSlash]: val })
      : acc;
  } else {
    return Object.assign(acc, { [preSlash]: val });
  }
}, {}));

console.log(Object.values(reduced));

https://jsfiddle.net/g2rkmn9m/

答案 2 :(得分:1)

使用Array#reduce以对象作为累加器来迭代数组。

在每次迭代中,使用分隔符拆分元素,并使用结果的第一个元素作为属性,以便初始化它或将其更新为当前元素。

最后使用Object.values获取一系列独特元素。

Benchmarking表明这比发布时的其他两种方法都要快。

var sorted = ["4ff02829-df7e/0", "4ff02829-df7e/10", "8c138c02-c139/37", "54be465f-0c03/41", "b2036e03-384f/4", "b2036e03-384f/32", "b2036e03-384f/35"];
var unique = sorted.reduce((u, e) => ((u[e.split('/')[0]] = e), u), {});
console.log(Object.values(unique));