簡體   English   中英

在數組中動態創建新元素並更新以下所有元素的ID

[英]Dynamically create new element in array and update IDs of all following elements

我正在研究基於時間軸的日記/日記,其中有代表各個條目的JS對象數組。 每個對象都有一個基於其在數組中位置的ID。 問題是我希望能夠將一個條目插入到數組中的特定位置,然后更新所有條目的ID以匹配它們在數組中的新位置。 圖1

圖1:數組中有兩個ID為0和1的條目。我單擊第二個條目(id 1)中的按鈕,在此條目之前添加新條目。 新條目將具有“ id = 1”,並且所有以下所有條目都需要將其ID更新為“ id + = 1”,因此不會有重復的ID。

現在這是我的問題。 創建新條目之后(或之前),我似乎無法更新ID。 這是我的代碼:


創建新的Day對象並將其添加到數組

//currentID = ID of the entry I'm creating the new one from
//new Day(id, name, date, desc);
//daysArray is the array containing entry objects

var dayToCreate = new Day(currentID,
    $newDayName.val(),
    $newDayDate.val(),
    $newDayDescription.val());
daysArray.splice(currentID, 0, dayToCreate); //

更新以下所有數組元素的ID以匹配其新數組位置

var ii = daysArray.length - 1;
for (; ii > currentID; ii--) {
    daysArray[ii].id = ii;
    $( ".day#" + ii - 1 ).attr("id", ii); //Change ID of the DOM element
}

為新條目創建DOM

drawDay(currentID).insertBefore( $( ".day#" + currentID ) );

drawDay函數

function drawDay(dayId) {
    var $drawDiv = $( "<div class='day' id='" + daysArray[dayId].id + "'></div>" );

    //Return DOM for the day
    return $drawDiv;
}
var ii = daysArray.length - 1;
for (; ii > currentID; ii--) {
    daysArray[ii].id = ii;
    $( ".day#" + ii - 1 ).attr("id", ii); //Change ID of the DOM element
}

var daysArrayLength = daysArray.length,
    i = 0;
for (;i < daysArrayLength; i++ ) {
    daysArray[i].id = i + 1;
}

array.splice(start,deleteCount [,item1 [,item2 [,...]]])正在更改數組中的索引,因此您可以只使用索引作為ID嗎?

另一種方法是在一年中的每一天使用一組365個項目。 但是,這將效率更低。

或者讓ID按條目計數,但在此處使用日期:id ='“ + daysArray [dayId] .id +”'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM