mirror of
https://github.com/esx-framework/esx_core.git
synced 2026-08-29 17:28:53 +00:00
17cbed0263
Co-Authored-By: Jérémie N'gadi <jeremie.ngadi@gmail.com>
132 lines
1.9 KiB
Lua
132 lines
1.9 KiB
Lua
-- nil proof alternative to #table
|
|
function ESX.Table.SizeOf(table)
|
|
local keys = {}
|
|
|
|
for k,v in pairs(table) do
|
|
table.insert(keys, tonumber(k))
|
|
end
|
|
|
|
table.sort(keys, function(a,b) return a < b end)
|
|
|
|
if #keys > 0 then
|
|
return keys[#keys]
|
|
else
|
|
return 0
|
|
end
|
|
end
|
|
|
|
function ESX.Table.IndexOf(table, value)
|
|
for i=1, #table, 1 do
|
|
if table[i] == value then
|
|
return i
|
|
end
|
|
end
|
|
|
|
return -1
|
|
end
|
|
|
|
function ESX.Table.LastIndexOf(table, value)
|
|
for i=#table, 1, -1 do
|
|
if table[i] == value then
|
|
return i
|
|
end
|
|
end
|
|
|
|
return -1
|
|
end
|
|
|
|
function ESX.Table.Find(table, cb)
|
|
for i=1, #table, 1 do
|
|
if cb(table[i]) then
|
|
return table[i]
|
|
end
|
|
end
|
|
|
|
return nil
|
|
end
|
|
|
|
function ESX.Table.FindIndex(table, cb)
|
|
for i=1, #table, 1 do
|
|
if cb(table[i]) then
|
|
return i
|
|
end
|
|
end
|
|
|
|
return -1
|
|
end
|
|
|
|
function ESX.Table.Filter(table, cb)
|
|
local newTable = {}
|
|
|
|
for i=1, #table, 1 do
|
|
if cb(table[i]) then
|
|
table.insert(newTable, table[i])
|
|
end
|
|
end
|
|
|
|
return newTable
|
|
end
|
|
|
|
function ESX.Table.Map(table, cb)
|
|
local newTable = {}
|
|
|
|
for i=1, #table, 1 do
|
|
newTable[i] = cb(table[i], i)
|
|
end
|
|
|
|
return newTable
|
|
end
|
|
|
|
function ESX.Table.Reverse(table)
|
|
local newTable = {}
|
|
|
|
for i=#table, 1, -1 do
|
|
table.insert(newTable, table[i])
|
|
end
|
|
|
|
return newTable
|
|
end
|
|
|
|
function ESX.Table.Clone(table)
|
|
if type(table) ~= 'table' then return table end
|
|
|
|
local meta = getmetatable(table)
|
|
local target = {}
|
|
|
|
for k,v in pairs(table) do
|
|
if type(v) == 'table' then
|
|
target[k] = ESX.Table.Clone(v)
|
|
else
|
|
target[k] = v
|
|
end
|
|
end
|
|
|
|
setmetatable(target, meta)
|
|
|
|
return target
|
|
end
|
|
|
|
function ESX.Table.Concat(table1, table2)
|
|
local table3 = ESX.Table.Clone(table1)
|
|
|
|
for i=1, #table2, 1 do
|
|
table.insert(table3, table2[i])
|
|
end
|
|
|
|
return t3
|
|
end
|
|
|
|
function ESX.Table.Join(table, sep)
|
|
local sep = sep or ','
|
|
local str = ''
|
|
|
|
for i=1, #table, 1 do
|
|
if i > 1 then
|
|
str = str .. sep
|
|
end
|
|
|
|
str = str .. table[i]
|
|
end
|
|
|
|
return str
|
|
end |