вы находитесь на правильном пути, в основном плохая вещь, которую вы делаете, - это создание новых массивов [...arr]
, когда map уже дает вам новый массив.
Другие вещи, которые можно использовать, могут быть троичным оператором и возвращать непосредственно результат функции map
. Проверьте здесь improvedGetUpdate
:
var id = 3;
var obj = {
name: "test"
};
let arr = [{
name: "dd",
id: 1
}, {
name: "dzxcd",
id: 3
}, {
name: "nav",
id: 5
}, {
name: "hhh",
id: 4
}]
function getUpdated(obj, id) {
var item = [...arr];
const t = item.map((i) => {
if (i.id == id) {
return {
...obj,
id
}
} else {
return i;
}
})
return t
}
improvedGetUpdate = (obj, id) => arr.map(i => {
return i.id !== id ? i : {
...obj,
id
}
})
console.log(getUpdated(obj, id))
console.log(improvedGetUpdate(obj, id))
Различие имеет отношение, где Вам разрешают отослать к вещам это AConsts
имеет в его интерфейсном разделе. В первом AUnit
, Вы могли использовать Const4
для объявления фиксированного размера выстраивают в том интерфейсном разделе. Вы не могли сделать этого во втором AUnit
потому что Const4
не находится в объеме.
Это может иметь эффект на скомпилированную программу, если Вы не осторожны. Предположим, что у нас есть другая единица, которая также объявляет названную константу Const4
:
unit BConsts;
interface
const
Const4 = 50;
implementation
end.
Теперь мы определяем массив в UnitA
как это:
unit AUnit
interface
uses BConsts;
var
data: array[0..Pred(Const4)] of Integer;
implementation
uses AConsts;
procedure Work;
var
i: Integer;
begin
for i := 0 to Const4 - 1 do begin
data[i] := 8;
end;
end;
end.
Тот код запишет вне конца массива потому что Const4
это находится в объеме в интерфейсном разделе, не то же Const4
это используется в разделе реализации. Этого часто не происходит с константами. Это обычно просто происходит с двумя идентификаторами, FindClose
функция, определяемая в Windows
и SysUtils
, и TBitmap
, определенный в Graphics
и Windows
. И в тех двух случаях, компилятор скажет Вам о выполнении чего-то не так хотя он не скажет Вам точно об использовании идентификатора, который имеет два различных значения. Можно разрешить проблему путем квалификации идентификатора:
for i := 0 to BConsts.Const4 - 1 do
data[i] := 8;
Если все вышеупомянутые меры предосторожности обращены, таким образом, Ваши компиляции программы и работают правильно, то это не имеет никакого значения, где единицы используются. В Вашем примере с App1 и App2, эти две программы будут тем же. Они не будут идентичны — компилятор обработает вещи в другом порядке и таким образом вероятно, поместит вещи в различные места — но он не будет иметь никакого эффекта на осуществление Вашей программы.
Я поместил все ссылки в раздел реализации и только поставил те имена единицы в интерфейсе, к которому я имею.
Мне нравится ограничивать объем всего как можно больше, тем не менее, и эта политика в соответствии с этим.
IDE также использует как, где Вы объявляете, что Ваше использование устанавливает то, что он должен скомпилировать.
Если Ваш интерфейсный раздел будет использовать UnitA, и Ваш раздел реализации использует UnitB затем, если единица B перекомпиляция потребностей, Ваша единица не будет, но если Унита изменится затем, то Ваша единица должна будет быть перекомпилирована.
Это - один из секретов Delphis супер быстрая скорость сборки.
Относительно Вашего законченного исполняемого файла, я ожидаю, что это окажется тем же размером везде, куда Вы помещаете объявления (компоновщик умен и только связывается в методах и т.д., которые на самом деле используются Вашим приложением), но фактическое местоположение различных источников почти наверняка изменилось бы, если порядок объявлений единицы изменяется.
Я следую правилу, что я поместил все на Интерфейсную часть, если я не должен иметь дело с проблемами с циклическими ссылками. Это помогает принести немного ясности. Некоторые мастера в Delphi и "Файле> Единица Использования..." диалоговое окно помещают единицы на раздел реализации.
За исключением прерываний обзора, которые выделенный Rob Kennedy, это, не имеет значения. Сделайте свой стандарт и придерживайтесь его.
Объекты в операторе использования в интерфейсе видимы во всей единице.
Объекты в операторе использования в реализации только видимы в разделе реализации.
Пример:
unit A;
interface
const
cA = 1;
..
unit B;
interface
const
cB = 1;
..
unit C;
interface
uses
A;
const
cC1 = cA;
cC2 = cB; // Error
implementation
uses
B;
const
cC3 = cA;
cC4 = cB;
end.
Можно создать взаимные зависимые единицы, если по крайней мере одна единица включена в раздел реализации:
unit A;
interface
implementation
uses
B;
end.
unit B;
interface
implementation
uses
A;
end.
Если оба будут использоваться в интерфейсном разделе, то он не будет компилировать/связывать.