2016-04-22 4 views
2
var a = ["11", "22", "46", "22", "11", "55"]; 

console.log(a); // [ '11', '22', '46', '22', '11', '55' ] 

// Calculates my values 
var b = a.map(function(num) { 
    return num.split('') 
    .map(Number) 
    .reduce(function(a, b) { 
     return a + b; 
    }); 
}); 
console.log(b); // [ 2, 4, 10, 4, 2, 10 ] 

// Finds my biggest value 
var c = 0; 
for (var i = 0; i < b.length; i++) { 
    if (b[i] > c) { 
    c = b[i]; 
    } 
} 
console.log(c); // 10 

// Sorts my array 
var d = b; 
d.sort(function(a, b) { 
    return a - b; 
}); 
console.log(d); // [ 2, 2, 4, 4, 10, 10 ] 

У меня возникли проблемы. var d рассказывает об этих следующих массивах [ 2, 2, 4, 4, 10, 10 ]. Первоначально они взяты из этого массива ["11","22","46","22","11","55"]. Я также сортирую их. Итак, в конце в var d я получаю два десяти в конце моего массива. Предположим, что d[4] изначально исходил от a[2] и d[5] пришел от a[5]. Как я могу заставить код сказать мне первоначальное значение 10 из моего первого массива. Допустим, мы получаем 2, 2, 4, 4, 10, 10. Я хочу, чтобы это последнее 10 с правой стороны, чтобы сказать мне, что оно исходило от "55". Есть ли способ сделать это?Оригинальная величина массива после модификации

+1

Возможно только с 'objects', используя массив' {значение: '', Происхождение: '', ...} 'или что-то вроде того? – somethinghere

ответ

1

В то время как другие решения от Иосифа Dreamer указывает на правильном направлении, не хватает его конкретный результат хотел вопроса.

Это предложение использует массив с объектами и сохраняет прежний порядок сортировки с pos и запрошенным кобинированным номером.

После сортировки вы можете получить доступ к последнему элементу и получить исходное значение из нового массива.

var a = ["11", "22", "46", "22", "11", "55"], 
 
    b = a.map(function (aa, i) { 
 
     return { 
 
      value: aa, 
 
      pos: i, 
 
      number: aa.split('').map(Number).reduce(function (a, b) { return a + b }, 0), 
 
     }; 
 
    }); 
 

 
b.sort(function (a, b) { 
 
    return a.number - b.number; 
 
}); 
 

 
document.write(b[b.length - 1].value); 
 
document.write('<pre>' + JSON.stringify(b, 0, 4) + '</pre>');

function myfun(a) { 
 
    var b = a.map(function (aa, i) { 
 
      return { 
 
       value: aa, 
 
       pos: i, 
 
       number: aa.replace(/-/g, '').split('').map(Number).reduce(function (a, b) { return a + b }, 0), 
 
      }; 
 
     }); 
 

 
    b.sort(function (a, b) { 
 
     return a.number - b.number; 
 
    }); 
 
    return b; 
 
} 
 

 
document.write('<pre>' + JSON.stringify(myfun(['1-2-3-4', '5-67-7-8', '2-3545-4-6-8-1', '3-3-4-1-3-4', "3-2-4-5-7", '2-3-4-5-7']), 0, 4) + '</pre>');

+1

Он отлично работает. Спасибо. –

+0

Что делать, если у меня есть символы «-» между моими цифрами типа «1-1» и «2-2». Я добавил новые переменные, такие как .toString(). Replace (/ -/g, ""); а затем еще один с .split (','); var b = a.toString(). replace (/ -/g, ""); \t // \t var c = b.split (','); но в конце мое исходное значение отображается без каких-либо «-», поэтому оно показывает мне 22 вместо 2-2. –

+0

используйте 'split ('-')' без замены. –

2

На своем a.map заставьте его вернуть объект со свойством, содержащим исходное значение, и свойство, которое вы хотите изменить. В следующем случае original будет значением, которое должно быть нетронутым, тогда как value - это тот, над которым вы будете работать. Дальнейшие операции должны работать с value и сохранять original.

a.map(function(num) { 
    return { 
    original: num, 
    value: //stuff 
    }; 
}); 
+0

Извините, Джозеф. Я пытаюсь написать код, но мне не повезло. Итак, это мой код, который я изменил правильно? Я просто думаю, что не возвращая никаких ошибок. a.map (функция (число) { возврата num.split ('') .map (номер) .reduce (функция (а, б) { возврата а + Ь; }); }); –

Смежные вопросы