What is LuaObjects?
A deceptive title, as this does not implement Objects as seen from JavaScript into Lua. It was either LuaObjects or LuaMaps-Sets-and-Arrays. I think you can see why I chose to opt to use this name instead.
LuaObjects is an implementation of Arrays, Maps, and Sets – all in 90% parity with the Arrays, Maps, and Sets seen in JavaScript.
Missing Features
- The
prototype
and__proto__
tags -
Symbol.species
andSymbol.iterator
.toString.call()
@@unscopables
-
entries()
,keys()
,values()
are missing on all. I don’t doubt that this could be added in the future, I just didn’t see a need to do them. Array.group()
- All inheritance from JavaScript
Function
andObject
.
Examples
Arrays
local Array = require(game.ReplicatedStorage.Packages.LuaObjects).Array
-- An array constructor accepts any iterable value; including strings, maps, and other arrays
-- A number could also be provided to specify its max length
Array.new()
Array.new(3) -- max length of 3
Array.new("hi!") -- ["h", "i", "!"]
Array.new({5, 12}) -- [5, 12]
Array.of(5, 12) -- [5, 12]
-- Just like JavaScript, using new is not required.
Array()
local newLength = array:push(7) -- 3
local mappedArray = array:map(function(num)
return num * 2
end) -- [10, 24, 14]
-- To get a value, you can just use array[key]
print(array[2]) -- 24
if mappedArray:includes(10) then
print(mappedArray:indexOf(10)) -- 2
end
Maps
local Map = require(game.ReplicatedStorage.Packages.LuaObjects).Maps
-- A map constructor accepts arrays with key-value pairs and generic tables
Map.new()
Map.new({ hi = "Hello World!" })
local array = Array.new({{"key", "value"}, {"lorem", "ipsum"}})
Map.new(array)
map:set("key", "value")
map:forEach(function(value, key)
print(key, value)
end)
-- To get a value or set a value, you can just use map[key]
print(map.key) -- "value"
map["ping"] = "pong"
Sets
local Set = require(game.ReplicatedStorage.Packages.LuaObjects).Sets
-- A set constructor accepts arrays, maps, tables, and strings
Set.new("hi!")
Set.new(Array.of(5, 12))
Set.new(Map.new({answer = 42})
Set.new({answer = "its not 42!"})
Set()
set:add("value")
set:add("value")
print(set.size) -- 1 -- No duplicates can be added to sets
set:delete("value")
Extras
local util = require(game.ReplicatedStorage.Packages.LuaObjects).util
util.shallowCopy({"hi", {"bye"}}) -- {"hi", table0x0FF}
util.deepCopy({"hi", {"bye"}}) -- {"hi", {"bye"}}
util.depthCopy -- allows you to decide how many "levels" deep in the table you want to copy
util.stringify({"hi", "how are you", "good"}) -- "hi, how are you, good"
util.iterateString("hello") -- {"h", "e", "l", "l", "o"}
If for whatever reason you may be using my Import module, you can require it like this:
local Array = import "@wally/luaObjects/array"
Installing LuaObjects
LuaObjects is a Wally Package. If you rather download it from GitHub you can from its source.
Using Wally
[dependencies]
LuaObjects = "alexinite/maps-arrays-sets@0.1.3"