рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ:
fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(2, 0, "Lemon", "Kiwi");
fruits // == ["Banana", "Orange", "Lemon", "Kiwi", "Apple", "Mango"]
рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ AS рдореЗрдВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░:
function splice(start: i32, deleteCount?: i32): Array<T>
рдореМрдЬреВрджрд╛ рд╕рд░рдгреА рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЕрдиреНрдп рддрд░реАрдХрд╛?
рд╡рд░реНрддрдорд╛рди рдореЗрдВ AS рд╡рд┐рд╡рд┐рдз рдХрд╛рд░реНрдп рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВ рдирдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ:
export function insertAfter<T>(arr: T[], index: i32, value: T): T[] {
const len = arr.length + 1
const res = new Array<T>(len)
if (index < 0) index = len + index - 1
if (index > len) index = len - 1
let i = 0
while (i < index) res[i] = arr[i++] // or use memory.copy
res[i++] = value
while (i < len) res[i] = arr[i++ - 1] // or use memory.copy
return res
}
// intead fruits.splice(2, 0, "Lemon", "Kiwi") use:
fruits = insertAfter(fruits, 2, "Lemon");
fruits = insertAfter(fruits, 3, "Kiwi");
@MaxGraey рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рдмреАрдЪ рдХрд┐рд╕реА рднреА рддрд░рд╣ stdlib рдореЗрдВ рдЗрд╕реЗ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдПрдХ spliceAndInsert
рдХреА рддрд░рд╣ рдмрд╛рдХреА рдкреИрд░рд╛ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╕рд░рдгреА рд▓реЗ рд░рд╣рд╛ рд╣реИ?
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╕рдореНрдорд┐рд▓рд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рд░рдгреА рдЙрдЪрд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реИред рд╡реИрд╕реЗ рднреА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ рдЕрдиреНрдп рд╕реНрдерд╛рди рд╣реИрдВ рдЬрд╣рд╛рдВ рд╡рд┐рд╡рд┐рдз рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдВрдХрд▓рдХ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рддрдВрддреНрд░ рдЬреЛрдбрд╝реЗрдВред
рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж @MaxGraey
insertAfter
рд╡рд┐рдЬреНрдЮрд╛рдкрд┐рдд рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдЗрди-рдкреНрд▓реЗрд╕ рд╕рд░рдгреА рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рд░ рдмрд╛рд░ рдПрдХ рдирдИ рд╕рд░рдгреА рдЖрд╡рдВрдЯрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ realloc
рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛), рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдкреБрди: рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
import {insertAfter} from "./insertAfter";
export function example(): string[] {
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits = insertAfter(fruits, 2, "Lemon");
fruits = insertAfter(fruits, 3, "Kiwi");
return fruits;
}
рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ (рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рд▓реЛрдбрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдЬреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ getArray
рддрдерд╛ getString
):
fruits_ptr = assemblyscript.module.exports.example()
// 21359280
fruits = Loader.getArray(fruits_ptr)
// (6)┬а[1152, 1184, 1312, 1616, 1216, 1248]
fruits.map(Loader.getString)
// (6)┬а["Banana", "Orange", "Lemon", "Kiwi", "Apple", "Mango"]
рд╣рд╛рдБ, рдирд┐рд╢реНрдЪрд┐рдд рдЙрджрд╛рд╣рд░рдгред рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ рдЖрдк рдЗрд╕реЗ __realloc
рдФрд░ memory.copy
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реБрдзрд╛рд░ рд╕рдХрддреЗ рд╣реИрдВ