İki ilişkili diziye eksik değerler nasıl eklenir? (JavaScript)


İki dizim var:

  1. category.data.xAxis // containing: ["0006", "0007", "0009", "0011", "0301"]
  2. category.data.yAxis // containing: [6.31412, 42.4245, 533.2234, 2345.5413, 3215.24]

Bir maksimum uzunluk alıp, örneğin DATAPOINT_LENGTH_STANDARD=540 ve xAxis dizisindeki her eksik sayı tabanlı stringi nasıl doldurabilirim? şöyle ki:

  1. Oluşan xAxis dizisi, "0000" ile "0540" (veya standart uzunluk neyse) arasında olacaktır
  2. İlişkili yAxis indeksleri, orijinal xAxis veri noktalarına bağlı kalmaya devam edecektir (örneğin "0006" ile 6.31412 arasında)
  3. Her yeni oluşturulan xAxis veri noktası, 0 değerine sahip bir yAxis değeri ile ilişkilidir (bu nedenle yeni oluşturulan "0000" xAxis girdisi, her ikisi için de yAxis'te 0 indeksinde 0 değerini içerecektir)

xEkseni değer dizilerinin zaten en düşükten en yükseğe doğru sıralandığı varsayılabilir.

DÜZENLE

Sorumun açıklığı, topluluğa daha doğrudan bir cevap bulmalarında yardımcı olma çabasıydı, ancak sanırım kesinlik, bir ödev sorusu izlenimi verdi. Yorumlara yanıt olarak, orijinal denemem, x eksenini doğru bir şekilde manipüle etmeyen ve uygun indekslemeyi korumayan:

let tempArray = categoryObject.data.xAxis;
let min = Math.min.apply(null, tempArray);
let max = Math.max.apply(null, tempArray);
while (min <= max) {
  if (tempArray.indexOf(min.toString()) === -1) {
      tempArray.push(min.toString());
      categoryObject.data.yAxis.push(0);
  }
  min++;
}
console.log(tempArray);
console.log(categoryObject.data.yAxis);

Cevap #1

let xAxis = ["0006", "0007", "0009", "0011", "0301"]
let yAxis = [6.31412, 42.4245, 533.2234, 2345.5413, 3215.24]
const DATAPOINT_LENGTH_STANDARD = 540

// This assumes at least one data point
let paddedLength = xAxis[0].length
// Creates a new array whose first index is 0, last index is
// DATAPOINT_LENGTH_STANDARD, filled with 0s.
let yAxis_new = new Array(DATAPOINT_LENGTH_STANDARD + 1).fill(0)
// Copy each known data point into the new array at the given index.
// The + before x parses the zero-padded string into an actual number.
xAxis.forEach((x, i) => yAxis_new[+x] = yAxis[i])
// Replace the given array with the new array.
yAxis = yAxis_new
// Store the padded version of the index at each index.
for (let i = 0; i <= DATAPOINT_LENGTH_STANDARD; ++i) {
  xAxis[i] = ('' + i).padStart(paddedLength, '0')
}

console.log(xAxis)
console.log(yAxis)

İlgili makaleler