Ну, причина в том, что привязки выполняются при выполнении кода, и выполняется определение функции, ну ... когда функции определены.
Сравните это:
class BananaBunch:
bananas = []
def addBanana(self, banana):
self.bananas.append(banana)
Этот код страдает от такого же неожиданного случая. bananas - это атрибут класса, и, следовательно, когда вы добавляете к нему вещи, он добавляется ко всем экземплярам этого класса. Причина в том, что это точно то же самое.
Это просто «Как это работает», и заставить его работать по-другому в функциональном случае, вероятно, будет сложно, а в случае класса вероятно невозможно или, по крайней мере, замедлить объект создание экземпляра, так как вам придется хранить код класса и выполнять его при создании объектов.
Да, это неожиданно. Но как только пенни падает, она прекрасно вписывается в то, как работает Python в целом. На самом деле, это хорошее учебное пособие, и как только вы поймете, почему это происходит, вы будете намного лучше читать python.
Это говорит о том, что он должен занимать видное место в любом хорошем учебнике Python. Потому что, как вы говорите, все рано или поздно сталкиваются с этой проблемой.
Я не уверен, хорошо ли я понимаю, но быстрое решение:
<html>
<script>
var table = [];
console.log(table);
function findInArrAndPush(obj){
const found = table.some(el => el.issueID === obj.issueID);
if (!found) table.push(obj);
return table;
}
for(i=0;i<3;i++){
var id = i;
var objToAdd = {"executionDate":"01-01-1000",
"issueID":id,
"priority":{
"jira": "1",
"computed":"1"
},
"expectedValue":{
"jira": "2",
"computed":"2"
}
};
console.log(findInArrAndPush(objToAdd));
//ADD TO FILE HERE
}
</script>
<body>
</body>
</html>
единственное, что вам нужно сделать здесь - распечатать результат в файл.