С учетом исходного примера:
var objs = [
{ first_nom: 'Lazslo', last_nom: 'Jamf' },
{ first_nom: 'Pig', last_nom: 'Bodine' },
{ first_nom: 'Pirate', last_nom: 'Prentice' }
];
Сортировка по нескольким полям:
objs.sort(function(left, right) {
var last_nom_order = left.last_nom.localeCompare(right.last_nom);
var first_nom_order = left.first_nom.localeCompare(right.first_nom);
return last_nom_order || first_nom_order;
});
Примечания
a.localeCompare(b)
- универсально поддерживается и возвращает -1,0,1, если a, a==b
, a>b
соответственно.
||
в последней строке дает last_nom
приоритет над first_nom
. var age_order = left.age - right.age;
return -last_nom_order || -first_nom_order || -age_order;
Хорошо, таким образом, ключ для меня должен был использовать.FlattenHierarchy BindingFlag. Я действительно не знаю, почему я просто добавил его на догадке, и это начало работать. Таким образом, конечное решение, которое позволяет мне получать Общедоступный Экземпляр или Статические Свойства:
obj.GetType.GetProperty(propName, Reflection.BindingFlags.Public _
Or Reflection.BindingFlags.Static Or Reflection.BindingFlags.Instance Or _
Reflection.BindingFlags.FlattenHierarchy)
Это - C#, но должно дать Вам идею:
public static void Main() {
typeof(Program).GetProperty("GetMe", BindingFlags.NonPublic | BindingFlags.Static);
}
private static int GetMe {
get { return 0; }
}
(Вы должны ИЛИ NonPublic и Статичный только)
Ниже, кажется, работает на меня.
using System;
using System.Reflection;
public class ReflectStatic
{
private static int SomeNumber {get; set;}
public static object SomeReference {get; set;}
static ReflectStatic()
{
SomeReference = new object();
Console.WriteLine(SomeReference.GetHashCode());
}
}
public class Program
{
public static void Main()
{
var rs = new ReflectStatic();
var pi = rs.GetType().GetProperty("SomeReference", BindingFlags.Static | BindingFlags.Public);
if(pi == null) { Console.WriteLine("Null!"); Environment.Exit(0);}
Console.WriteLine(pi.GetValue(rs, null).GetHashCode());
}
}
Попробуйте этот Отражение C# ссылка.
Примечание я думаю тот BindingFlags. Экземпляр и BindingFlags. Статичный эксклюзивны.
Или просто посмотрите на это ...
Type type = typeof(MyClass); // MyClass is static class with static properties
foreach (var p in type.GetProperties())
{
var v = p.GetValue(null, null); // static classes cannot be instanced, so use null...
}