إزالة القيم المكررة في مصفوفة ثنائية الأبعاد وإرجاع القيم المتوسطة لجميع قيم المفاتيح التي تم تكرار المفتاح الأول فيها

StackOverflow https://stackoverflow.com/questions/20353249

  •  25-08-2022
  •  | 
  •  

سؤال

لدي مصفوفة ثنائية الأبعاد تحتوي على قيم مكررة للمفتاح الأول (الوقت)، كتبت جافا سكريبت:هذه هي محاولتي التي تزيل القيم المكررة وتعيد التكرار الأول لقيمة متكررة، ولكن ما أريد فعله بالضبط هو إرجاع متوسط ​​كل من القيم المتبقية في المصفوفة:على سبيل المثال هذا هو مدخلاتي

var testArray = [
  ['2011-08-01 20:46:04',10,40,20,20],//same time 
  ['2011-08-01 20:46:04',20,45,25,70], 

  ['2011-09-01 17:02:04',20,35,15,25],

  ['2012-10-01 16:55:44',30,30,10,30],//same time
  ['2012-10-01 16:55:44',40,45,13,23]

];

هذا هو الناتج المطلوب:

  var testArray = [
      ['2011-08-01 20:46:04',15,42.5,22.5,45],//save time only once and the resut of athors values is the average 

      ['2011-09-01 17:02:04',20,35,15,25],

      ['2012-10-01 16:55:44',35,37.5,11.5,26.5],

    ];
هل كانت مفيدة؟

المحلول

ليس رمزًا جميلًا، لكن آمل أن يساعد هذا!

var testArray = [
        ['2011-08-01 20:46:04',10,40,20,20],//same time
        ['2011-08-01 20:46:04',20,45,25,70],

        ['2011-09-01 17:02:04',20,35,15,25],

        ['2012-10-01 16:55:44',30,30,10,30],//same time
        ['2012-10-01 16:55:44',40,45,13,23]
    ],
    dictionary = {}, result = [];

testArray.forEach(function(element) {
    var time = element[0],
        currentValues = element.splice(1),
        storedValues;

    if(!dictionary[time]) {
        dictionary[time] = currentValues;
    }

    storedValues = dictionary[time];

    currentValues.forEach(function(currentElement, index) {
        storedValues[index] = (currentElement + storedValues[index]) / 2;
    })
});

for(var property in dictionary) {
    if(dictionary.hasOwnProperty(property)) {
        result.push([property].concat(dictionary[property]));
    }
}

console.log(result);

هذه المخرجات:

MacBookPro-do-Renato:stackoverflow Renato$ node so.js
[ [ '2011-08-01 20:46:04', 15, 42.5, 22.5, 45 ],
  [ '2011-09-01 17:02:04', 20, 35, 15, 25 ],
  [ '2012-10-01 16:55:44', 35, 37.5, 11.5, 26.5 ] ]

ملاحظة.: يفترض هذا الرمز أنه سيكون لديك دائمًا نفس عدد القيم بعد سلسلة التاريخ

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top