Diff
checker
텍스트
텍스트
이미지
문서
Excel
폴더
Legal
Enterprise
데스크톱
요금제
로그인
데스크톱 앱 다운로드
텍스트 비교
두 텍스트 파일의 차이점을 찾아보세요
도구
기록
실시간 편집
변경 없는 행 숨기기
줄바꿈 비활성화
레이아웃
나란히 보기
합쳐 보기
비교 단위
스마트
단어
글자
구문 강조
언어 선택
제외
텍스트 변환
첫 변경으로
수정
Diffchecker Desktop
가장 안전하게 Diffchecker를 사용하는 방법. 데스크톱 앱을 사용하면 비교 데이터가 외부로 전송되지 않습니다!
데스크톱 앱 받기
Untitled diff
생성일
8년 전
비교 결과 만료 없음
초기화
내보내기
공유
설명
60 삭제
행
총
삭제
글자
총
삭제
이 기능을 계속 사용하려면 업그레이드해 주세요
Diff
checker
Pro
요금제 보기
153 행
복사
59 추가
행
총
추가
글자
총
추가
이 기능을 계속 사용하려면 업그레이드해 주세요
Diff
checker
Pro
요금제 보기
155 행
복사
복사
복사됨
복사
복사됨
#
src
#
babel
'use strict';
'use strict';
/*
/*
* OBJECT ASSIGN DEEP
* OBJECT ASSIGN DEEP
* Allows deep cloning of plain objects that contain primitives, nested plain objects, or nested plain arrays.
* Allows deep cloning of plain objects that contain primitives, nested plain objects, or nested plain arrays.
*/
*/
/*
/*
* A unified way of returning a string that describes the type of the given variable.
* A unified way of returning a string that describes the type of the given variable.
*/
*/
복사
복사됨
복사
복사됨
function getTypeOf
(input) {
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
function getTypeOf
(input) {
if (input === null) {
if (input === null) {
return 'null';
return 'null';
복사
복사됨
복사
복사됨
}
}
else if (typeof input === 'undefined') {
else if (typeof input === 'undefined') {
return 'undefined';
return 'undefined';
복사
복사됨
복사
복사됨
}
}
else if
(
(typeof input === '
undefined' ? 'undefined' : _typeof(input)) === '
object') {
return
Array.isArray(input) ? 'array' : 'object'
;
else if
(typeof input === '
object') {
return
(
Array.isArray(input) ? 'array' : 'object'
)
;
}
}
복사
복사됨
복사
복사됨
return typeof input
;
return typeof input
=== 'undefined' ? 'undefined' : _typeof(input);
}
}
/*
/*
* Branching logic which calls the correct function to clone the given value base on its type.
* Branching logic which calls the correct function to clone the given value base on its type.
*/
*/
복사
복사됨
복사
복사됨
function cloneValue
(value) {
function cloneValue
(value) {
// The value is an object so lets clone it.
// The value is an object so lets clone it.
if (getTypeOf(value) === 'object') {
if (getTypeOf(value) === 'object') {
return quickCloneObject(value);
return quickCloneObject(value);
}
}
// The value is an array so lets clone it.
// The value is an array so lets clone it.
else if (getTypeOf(value) === 'array') {
else if (getTypeOf(value) === 'array') {
복사
복사됨
복사
복사됨
return quickCloneArray(value);
return quickCloneArray(value);
}
}
// Any other value can just be copied.
// Any other value can just be copied.
return value;
return value;
복사
복사됨
복사
복사됨
}
}
/*
/*
* Enumerates the given array and returns a new array, with each of its values cloned (i.e. references broken).
* Enumerates the given array and returns a new array, with each of its values cloned (i.e. references broken).
*/
*/
복사
복사됨
복사
복사됨
function quickCloneArray
(input) {
function quickCloneArray
(input) {
return input.map(cloneValue);
return input.map(cloneValue);
}
}
/*
/*
* Enumerates the properties of the given object (ignoring the prototype chain) and returns a new object, with each of
* Enumerates the properties of the given object (ignoring the prototype chain) and returns a new object, with each of
* its values cloned (i.e. references broken).
* its values cloned (i.e. references broken).
*/
*/
복사
복사됨
복사
복사됨
function quickCloneObject
(input) {
function quickCloneObject
(input) {
복사
복사됨
복사
복사됨
const
output = {};
var
output = {};
복사
복사됨
복사
복사됨
for (
const
key in input) {
for (
var
key in input) {
if (!input.hasOwnProperty(key)) {
continue;
}
if (!input.hasOwnProperty(key)) {
continue;
}
output[key] = cloneValue(input[key]);
output[key] = cloneValue(input[key]);
}
}
return output;
return output;
복사
복사됨
복사
복사됨
}
}
/*
/*
* Does the actual deep merging.
* Does the actual deep merging.
*/
*/
복사
복사됨
복사
복사됨
function executeDeepMerge
(target
,
_objects =
[], _options = {}) {
function executeDeepMerge
(target
) {
var
_objects =
arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
복사
복사됨
복사
복사됨
const
options = {
var _options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
arrayBehaviour: _options.arrayBehaviour || 'replace'
,
// Can be "merge" or "replace".
var
options = {
arrayBehaviour: _options.arrayBehaviour || 'replace'
// Can be "merge" or "replace".
};
};
// Ensure we have actual objects for each.
// Ensure we have actual objects for each.
복사
복사됨
복사
복사됨
const
objects = _objects.map
(object
=>
object || {}
);
var
objects = _objects.map
(function
(object
) {
const
output = target || {};
return
object || {}
;
}
);
var
output = target || {};
// Enumerate the objects and their keys.
// Enumerate the objects and their keys.
복사
복사됨
복사
복사됨
for (
let
oindex = 0; oindex < objects.length; oindex++) {
for (
var
oindex = 0; oindex < objects.length; oindex++) {
const
object = objects[oindex];
var
object = objects[oindex];
const
keys = Object.keys(object);
var
keys = Object.keys(object);
복사
복사됨
복사
복사됨
for (
let
kindex = 0; kindex < keys.length; kindex++) {
for (
var
kindex = 0; kindex < keys.length; kindex++) {
const
key = keys[kindex];
var
key = keys[kindex];
const
value = object[key];
var
value = object[key];
const
type = getTypeOf(value);
var
type = getTypeOf(value);
const
existingValueType = getTypeOf(output[key]);
var
existingValueType = getTypeOf(output[key]);
if (type === 'object') {
if (type === 'object') {
if (existingValueType !== 'undefined') {
if (existingValueType !== 'undefined') {
복사
복사됨
복사
복사됨
const
existingValue =
(
existingValueType === 'object' ? output[key] : {}
)
;
var
existingValue =
existingValueType === 'object' ? output[key] : {}
;
output[key] = executeDeepMerge({}, [existingValue, quickCloneObject(value)], options);
output[key] = executeDeepMerge({}, [existingValue, quickCloneObject(value)], options);
복사
복사됨
복사
복사됨
}
}
else {
else {
output[key] = quickCloneObject(value);
output[key] = quickCloneObject(value);
}
}
복사
복사됨
복사
복사됨
}
}
else if (type === 'array') {
else if (type === 'array') {
if (existingValueType === 'array') {
if (existingValueType === 'array') {
복사
복사됨
복사
복사됨
const
newValue = quickCloneArray(value);
var
newValue = quickCloneArray(value);
output[key] =
(
options.arrayBehaviour === 'merge' ? output[key].concat(newValue) : newValue
)
;
output[key] =
options.arrayBehaviour === 'merge' ? output[key].concat(newValue) : newValue
;
}
}
else {
else {
output[key] = quickCloneArray(value);
output[key] = quickCloneArray(value);
}
}
복사
복사됨
복사
복사됨
}
}
else {
else {
output[key] = value;
output[key] = value;
}
}
복사
복사됨
복사
복사됨
}
}
}
}
return output;
return output;
복사
복사됨
복사
복사됨
}
}
/*
/*
* Merge all the supplied objects into the target object, breaking all references, including those of nested objects
* Merge all the supplied objects into the target object, breaking all references, including those of nested objects
* and arrays, and even objects nested inside arrays. The first parameter is not mutated unlike Object.assign().
* and arrays, and even objects nested inside arrays. The first parameter is not mutated unlike Object.assign().
* Properties in later objects will always overwrite.
* Properties in later objects will always overwrite.
*/
*/
복사
복사됨
복사
복사됨
module.exports = function objectAssignDeep
(target
, ...
objects
) {
module.exports = function objectAssignDeep
(target
) {
for (var _len = arguments.length,
objects
= Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++
) {
objects[_key - 1] = arguments[_key];
}
return executeDeepMerge(target, objects);
return executeDeepMerge(target, objects);
};
};
/*
/*
* Same as objectAssignDeep() except it doesn't mutate the target object and returns an entirely new object.
* Same as objectAssignDeep() except it doesn't mutate the target object and returns an entirely new object.
*/
*/
복사
복사됨
복사
복사됨
module.exports.noMutate = function objectAssignDeepInto
(...
objects
) {
module.exports.noMutate = function objectAssignDeepInto
() {
for (var _len2 = arguments.length,
objects
= Array(_len2), _key2 = 0; _key2 < _len2; _key2++
) {
objects[_key2] = arguments[_key2];
}
return executeDeepMerge({}, objects);
return executeDeepMerge({}, objects);
};
};
/*
/*
* Allows an options object to be passed in to customise the behaviour of the function.
* Allows an options object to be passed in to customise the behaviour of the function.
*/
*/
복사
복사됨
복사
복사됨
module.exports.withOptions = function objectAssignDeepInto
(target, objects, options) {
module.exports.withOptions = function objectAssignDeepInto
(target, objects, options) {
return executeDeepMerge(target, objects, options);
return executeDeepMerge(target, objects, options);
};
};
복사
복사됨
복사
복사됨
저장된 비교 결과
원본
파일 열기
# src 'use strict'; /* * OBJECT ASSIGN DEEP * Allows deep cloning of plain objects that contain primitives, nested plain objects, or nested plain arrays. */ /* * A unified way of returning a string that describes the type of the given variable. */ function getTypeOf (input) { if (input === null) { return 'null'; } else if (typeof input === 'undefined') { return 'undefined'; } else if (typeof input === 'object') { return (Array.isArray(input) ? 'array' : 'object'); } return typeof input; } /* * Branching logic which calls the correct function to clone the given value base on its type. */ function cloneValue (value) { // The value is an object so lets clone it. if (getTypeOf(value) === 'object') { return quickCloneObject(value); } // The value is an array so lets clone it. else if (getTypeOf(value) === 'array') { return quickCloneArray(value); } // Any other value can just be copied. return value; } /* * Enumerates the given array and returns a new array, with each of its values cloned (i.e. references broken). */ function quickCloneArray (input) { return input.map(cloneValue); } /* * Enumerates the properties of the given object (ignoring the prototype chain) and returns a new object, with each of * its values cloned (i.e. references broken). */ function quickCloneObject (input) { const output = {}; for (const key in input) { if (!input.hasOwnProperty(key)) { continue; } output[key] = cloneValue(input[key]); } return output; } /* * Does the actual deep merging. */ function executeDeepMerge (target, _objects = [], _options = {}) { const options = { arrayBehaviour: _options.arrayBehaviour || 'replace', // Can be "merge" or "replace". }; // Ensure we have actual objects for each. const objects = _objects.map(object => object || {}); const output = target || {}; // Enumerate the objects and their keys. for (let oindex = 0; oindex < objects.length; oindex++) { const object = objects[oindex]; const keys = Object.keys(object); for (let kindex = 0; kindex < keys.length; kindex++) { const key = keys[kindex]; const value = object[key]; const type = getTypeOf(value); const existingValueType = getTypeOf(output[key]); if (type === 'object') { if (existingValueType !== 'undefined') { const existingValue = (existingValueType === 'object' ? output[key] : {}); output[key] = executeDeepMerge({}, [existingValue, quickCloneObject(value)], options); } else { output[key] = quickCloneObject(value); } } else if (type === 'array') { if (existingValueType === 'array') { const newValue = quickCloneArray(value); output[key] = (options.arrayBehaviour === 'merge' ? output[key].concat(newValue) : newValue); } else { output[key] = quickCloneArray(value); } } else { output[key] = value; } } } return output; } /* * Merge all the supplied objects into the target object, breaking all references, including those of nested objects * and arrays, and even objects nested inside arrays. The first parameter is not mutated unlike Object.assign(). * Properties in later objects will always overwrite. */ module.exports = function objectAssignDeep (target, ...objects) { return executeDeepMerge(target, objects); }; /* * Same as objectAssignDeep() except it doesn't mutate the target object and returns an entirely new object. */ module.exports.noMutate = function objectAssignDeepInto (...objects) { return executeDeepMerge({}, objects); }; /* * Allows an options object to be passed in to customise the behaviour of the function. */ module.exports.withOptions = function objectAssignDeepInto (target, objects, options) { return executeDeepMerge(target, objects, options); };
수정본
파일 열기
# babel 'use strict'; /* * OBJECT ASSIGN DEEP * Allows deep cloning of plain objects that contain primitives, nested plain objects, or nested plain arrays. */ /* * A unified way of returning a string that describes the type of the given variable. */ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; function getTypeOf(input) { if (input === null) { return 'null'; } else if (typeof input === 'undefined') { return 'undefined'; } else if ((typeof input === 'undefined' ? 'undefined' : _typeof(input)) === 'object') { return Array.isArray(input) ? 'array' : 'object'; } return typeof input === 'undefined' ? 'undefined' : _typeof(input); } /* * Branching logic which calls the correct function to clone the given value base on its type. */ function cloneValue(value) { // The value is an object so lets clone it. if (getTypeOf(value) === 'object') { return quickCloneObject(value); } // The value is an array so lets clone it. else if (getTypeOf(value) === 'array') { return quickCloneArray(value); } // Any other value can just be copied. return value; } /* * Enumerates the given array and returns a new array, with each of its values cloned (i.e. references broken). */ function quickCloneArray(input) { return input.map(cloneValue); } /* * Enumerates the properties of the given object (ignoring the prototype chain) and returns a new object, with each of * its values cloned (i.e. references broken). */ function quickCloneObject(input) { var output = {}; for (var key in input) { if (!input.hasOwnProperty(key)) { continue; } output[key] = cloneValue(input[key]); } return output; } /* * Does the actual deep merging. */ function executeDeepMerge(target) { var _objects = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; var _options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var options = { arrayBehaviour: _options.arrayBehaviour || 'replace' // Can be "merge" or "replace". }; // Ensure we have actual objects for each. var objects = _objects.map(function (object) { return object || {}; }); var output = target || {}; // Enumerate the objects and their keys. for (var oindex = 0; oindex < objects.length; oindex++) { var object = objects[oindex]; var keys = Object.keys(object); for (var kindex = 0; kindex < keys.length; kindex++) { var key = keys[kindex]; var value = object[key]; var type = getTypeOf(value); var existingValueType = getTypeOf(output[key]); if (type === 'object') { if (existingValueType !== 'undefined') { var existingValue = existingValueType === 'object' ? output[key] : {}; output[key] = executeDeepMerge({}, [existingValue, quickCloneObject(value)], options); } else { output[key] = quickCloneObject(value); } } else if (type === 'array') { if (existingValueType === 'array') { var newValue = quickCloneArray(value); output[key] = options.arrayBehaviour === 'merge' ? output[key].concat(newValue) : newValue; } else { output[key] = quickCloneArray(value); } } else { output[key] = value; } } } return output; } /* * Merge all the supplied objects into the target object, breaking all references, including those of nested objects * and arrays, and even objects nested inside arrays. The first parameter is not mutated unlike Object.assign(). * Properties in later objects will always overwrite. */ module.exports = function objectAssignDeep(target) { for (var _len = arguments.length, objects = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { objects[_key - 1] = arguments[_key]; } return executeDeepMerge(target, objects); }; /* * Same as objectAssignDeep() except it doesn't mutate the target object and returns an entirely new object. */ module.exports.noMutate = function objectAssignDeepInto() { for (var _len2 = arguments.length, objects = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { objects[_key2] = arguments[_key2]; } return executeDeepMerge({}, objects); }; /* * Allows an options object to be passed in to customise the behaviour of the function. */ module.exports.withOptions = function objectAssignDeepInto(target, objects, options) { return executeDeepMerge(target, objects, options); };
비교하기