public static List <string> AsListOfString(this Jint.Native.Array.ArrayInstance a) { var values = new List <string>(); for (var i = 0; i < a.GetLength(); i++) { values.Add(a.Get(i.ToString()).AsString()); } return(values); }
public static List <object> AsListOfObjects(this Jint.Native.Array.ArrayInstance a) { var values = new List <object>(); for (var i = 0; i < a.GetLength(); i++) { values.Add(a.GetItem(i)); } return(values); }
public ObjectInstance Construct(JsValue[] arguments) { var instance = new ArrayInstance(Engine); instance.Prototype = PrototypeObject; instance.Extensible = true; if (arguments.Length == 1 && arguments.At(0).IsNumber()) { var length = TypeConverter.ToUint32(arguments.At(0)); if (!TypeConverter.ToNumber(arguments[0]).Equals(length)) { throw new JavaScriptException(Engine.RangeError, "Invalid array length"); } instance.FastAddProperty("length", length, true, false, false); } else if (arguments.Length == 1 && arguments.At(0).IsObject() && arguments.At(0).As<ObjectWrapper>() != null) { var enumerable = arguments.At(0).As<ObjectWrapper>().Target as IEnumerable; if (enumerable != null) { var jsArray = Engine.Array.Construct(Arguments.Empty); foreach (var item in enumerable) { var jsItem = JsValue.FromObject(Engine, item); Engine.Array.PrototypeObject.Push(jsArray, Arguments.From(jsItem)); } return jsArray; } } else { instance.FastAddProperty("length", 0, true, false, false); PrototypeObject.Push(instance, arguments); } return instance; }
public static object GetItem(this Jint.Native.Array.ArrayInstance a, int index) { JsValue l = a.Get(index.ToString()); if (l.IsNull()) { return(null); } if (l.IsNumber()) { return(l.AsNumber()); } if (l.IsBoolean()) { return(l.AsBoolean()); } if (l.IsString()) { return(l.AsString()); } if (l.IsNumber()) { return(l.AsNumber()); } if (l.IsUndefined()) { return("undefined"); } if (l.IsObject()) { return(l.AsObject()); } if (l.IsRegExp()) { return(l.AsObject()); } throw new ArgumentException(string.Format("Cannot deal with JsValue {0}", l)); }
public static int GetLength(this Jint.Native.Array.ArrayInstance a) { var l = a.Get("length"); return((int)l.AsNumber()); }
private string SerializeArray(ArrayInstance value) { EnsureNonCyclicity(value); _stack.Push(value); var stepback = _indent; _indent = _indent + _gap; var partial = new List<string>(); var len = TypeConverter.ToUint32(value.Get("length")); for (int i = 0; i < len; i++) { var strP = Str(TypeConverter.ToString(i), value); if (strP == JsValue.Undefined) strP = "null"; partial.Add(strP.AsString()); } if (partial.Count == 0) { return "[]"; } string final; if (_gap == "") { var separator = ","; var properties = System.String.Join(separator, partial.ToArray()); final = "[" + properties + "]"; } else { var separator = ",\n" + _indent; var properties = System.String.Join(separator, partial.ToArray()); final = "[\n" + _indent + properties + "\n" + stepback + "]"; } _stack.Pop(); _indent = stepback; return final; }