diff options
-rw-r--r-- | README.md | 19 | ||||
-rw-r--r-- | lib.c | 12 |
2 files changed, 28 insertions, 3 deletions
@@ -637,10 +637,23 @@ if the given argument is no object. Convert the given string to lowercase and return the resulting string. Returns `null` if the given argument could not be converted to a string. -#### 6.18. `length(arr_or_str)` +#### 6.18. `length(x)` -Return the length of the given array or string. Returns `null` if the given -argument is neither an array, nor a string. +Return the length of the given object, array or string. Returns `null` if +the given argument is neither an object, array, nor a string. + +For objects, the length is defined as the number of keys within the object, +for arrays the length specifies the amount of contained items and for strings +it represents the number of contained bytes. + +```javascript +length("test") // 4 +length([true, false, null, 123, "test"]) // 5 +length({foo: true, bar: 123, baz: "test"}) // 3 +length({}) // 0 +length(true) // null +length(10.0) // null +``` #### 6.19. `log(x)` @@ -368,8 +368,20 @@ static struct json_object * ut_length(struct ut_state *s, uint32_t off, struct json_object *args) { struct json_object *arg = json_object_array_get_idx(args, 0); + size_t len; switch (json_object_get_type(arg)) { + case json_type_object: + len = 0; + + json_object_object_foreach(arg, k, v) { + (void)k; + (void)v; + len++; + } + + return xjs_new_int64(len); + case json_type_array: return xjs_new_int64(json_object_array_length(arg)); |