locutus
Version:
Locutus other languages' standard libraries to JavaScript for fun and educational purposes
51 lines (50 loc) • 1.85 kB
JavaScript
const isBoxedScalar = (value) => {
if (typeof value !== 'object' || value === null) {
return false;
}
const objectTag = Object.prototype.toString.call(value);
return objectTag === '[object String]' || objectTag === '[object Number]' || objectTag === '[object Boolean]';
};
const describeArrayValuesArgument = (value) => {
if (typeof value === 'string') {
return 'string';
}
if (typeof value === 'boolean') {
return 'bool';
}
if (typeof value === 'number') {
return Number.isInteger(value) ? 'int' : 'float';
}
if (typeof value === 'bigint') {
return 'int';
}
if (typeof value === 'undefined' || value === null) {
return 'null';
}
if (typeof value === 'object') {
const objectTag = Object.prototype.toString.call(value);
if (objectTag === '[object String]') {
return 'string';
}
if (objectTag === '[object Number]') {
return Number.isInteger(Number(value.valueOf())) ? 'int' : 'float';
}
if (objectTag === '[object Boolean]') {
return 'bool';
}
return 'object';
}
return typeof value;
};
export function array_values(input) {
// discuss at: https://locutus.io/php/array_values/
// parity verified: PHP 8.3
// original by: Kevin van Zonneveld (https://kvz.io)
// improved by: Brett Zamir (https://brett-zamir.me)
// example 1: array_values( {firstname: 'Kevin', surname: 'van Zonneveld'} )
// returns 1: [ 'Kevin', 'van Zonneveld' ]
if (typeof input !== 'object' || input === null || isBoxedScalar(input)) {
throw new TypeError(`array_values(): Argument #1 ($array) must be of type array, ${describeArrayValuesArgument(input)} given`);
}
return Object.values(input);
}