Об архитектуре densenet в тенор-потоке keras

(Это было добавлено в мою библиотеку в GitHub )

Переопределение колеса здесь! Ни одно из этих решений не работало для моей ситуации. Итак, я быстро усовершенствовал ответ страницы. Это не для печати на экран (через консоль, текстовое поле или что-то еще). Это, однако, для переноса данных. Эта версия, похоже, возвращает очень похожий результат, как toSource(). Я не пробовал JSON.stringify, но я предполагаю, что это примерно то же самое. Результатом этой функции является действительное объявление объекта Javascript.

Я бы не сомневался, что что-то подобное уже было на SO где-то, но было просто короче, чем потратить время на поиск прошлых ответов , И поскольку этот вопрос был моим лучшим хитом в google, когда я начал искать об этом; Я полагал, что это может помочь другим.

Во всяком случае результат этой функции будет представлять собой строковое представление вашего объекта, даже если ваш объект имеет встроенные объекты и массивы, и даже если эти объекты или массивы имеют еще больше внедренных объектов и массивов. (Я слышал, что вы любите пить? Итак, я кувал вашу машину с кулером, а потом, я кувал кулер кулером. Итак, ваш кулер может пить, а ваше прохладное.)

Массивы сохраняются с [] вместо {} и, следовательно, не имеют пары ключ / значение, просто значения. Как обычные массивы. Поэтому они создаются как массивы.

Кроме того, вся строка (включая имена ключей) цитируется, это необязательно, если только эти строки не имеют специальных символов (например, пробела или косой черты). Но мне не хотелось обнаруживать это только для того, чтобы удалить некоторые кавычки, которые в противном случае все равно бы работали нормально.

Эта результирующая строка затем может быть использована с eval или просто сбрасывать ее в переменную string , Таким образом, повторное создание объекта снова из текста.

function ObjToSource(o){
    if (!o) return 'null';
    var k="",na=typeof(o.length)=="undefined"?1:0,str="";
    for(var p in o){
        if (na) k = "'"+p+ "':";
        if (typeof o[p] == "string") str += k + "'" + o[p]+"',";
        else if (typeof o[p] == "object") str += k + ObjToSource(o[p])+",";
        else str += k + o[p] + ",";
    }
    if (na) return "{"+str.slice(0,-1)+"}";
    else return "["+str.slice(0,-1)+"]";
}

Сообщите мне, если я все испортил, отлично работает в моем тестировании. Кроме того, единственный способ определить тип array - проверить наличие length. Поскольку Javascript действительно хранит массивы как объекты, я не могу проверить на тип array (такого типа нет!). Если кто-то еще знает лучший способ, я бы хотел его услышать. Потому что, если ваш объект также имеет свойство с именем length, то эта функция будет ошибочно относиться к нему как к массиву.

EDIT: Добавлена ​​проверка для объектов с нулевой оценкой. Спасибо Brock Adams

EDIT: Ниже фиксированная функция, позволяющая печатать бесконечно рекурсивные объекты. Это не печатает то же, что и toSource из FF, потому что toSource будет печатать бесконечную рекурсию один раз, где as, эта функция немедленно ее уничтожит. Эта функция работает медленнее, чем предыдущая, поэтому я добавляю ее здесь вместо редактирования вышеприведенной функции, поскольку она нужна только в том случае, если вы планируете передавать объекты, которые ссылаются на себя где-то.

const ObjToSource=(o)=> {
    if (!o) return null;
    let str="",na=0,k,p;
    if (typeof(o) == "object") {
        if (!ObjToSource.check) ObjToSource.check = new Array();
        for (k=ObjToSource.check.length;na

Тест:

var test1 = new Object();
test1.foo = 1;
test1.bar = 2;

var testobject = new Object();
testobject.run = 1;
testobject.fast = null;
testobject.loop = testobject;
testobject.dup = test1;

console.log(ObjToSource(testobject));
console.log(testobject.toSource());

Результат:

{'run':1,'fast':null,'loop':{},'dup':{'foo':1,'bar':2}}
({run:1, fast:null, loop:{run:1, fast:null, loop:{}, dup:{foo:1, bar:2}}, dup:{foo:1, bar:2}})

ПРИМЕЧАНИЕ. Попытка печати document.body является ужасным примером. Во-первых, FF просто печатает пустую строку объекта при использовании toSource. И при использовании функции выше FF падает на SecurityError: The operation is insecure.. И Chrome рухнет на Uncaught RangeError: Maximum call stack size exceeded. Очевидно, что document.body не предназначалось для преобразования в строку. Потому что он слишком большой или против политики безопасности для доступа к определенным свойствам. Если бы я не испортил что-то здесь, скажи!

-1
задан giser_yugang 28 March 2019 в 05:34
поделиться