


Introduction to how to write a simple and efficient JSON query using function templates_javascript skills
JSON can be said to be the highlight of JavaScript. It can implement the initialization of Object and Array with elegant and concise code. It is also a text-based data definition, which is more semantic than symbol separation and more concise than XML. Therefore, more and more JS developers use it as data transmission and storage.
JS arrays have many useful methods built-in to facilitate our query and filtering of data. For example, we have a bunch of data:
var heroes = [
// Name============Attack======Defense========Strength====Dexterity=====Intelligence====
name: 'Ice Room Witch', DP: 38, AP: 1.3, STR: 16, AGI: 16, int: 21},
{name: 'Silent Warlock', DP: 39, AP: 1.1, STR: 17, Agi:16, Int:21},
{name:'Naga Siren', DP:51, AP:6.0, Str:21, Agi:21, Int:18},
{name :'Bounty Hunter', DP:39, AP:4.0, Str:17, Agi:21, Int:16},
18, Agi:22, Int:15},
{name:'Guardian of Light', DP:38, AP:1.1, Str:16, Agi:15, Int:22},
{name: 'Alchemist', DP:49, AP:0.6, Str:25, Agi:11, Int:25}
For heroes whose defense is greater than 40 and whose defense is less than 4, we can use Array’s filter method:
Copy code
First imagine, if the above code can be written like this, and
the query speed is the same as the handwritten traversal judgment
:
Copy the code
The code is as follows:
For example, for the characters in the select above, we simply replace "@" with "e." and "AND" with "&&", so it becomes a legal js expression that can be handed over to eval. implement.
So what we have to do is to translate the original statement into a js statement for execution. And in order to improve efficiency, the translated js expression is inlined into a context environment to generate an executable function body, instead of relying on callbacks for judgment in each traversal.
So, function templates will come in handy.
Introduction to function templatesIn C, there are such things as macros and class templates, which can allow some calculations to be completed during the compilation phase, greatly improving the performance of the runtime code. Although the script is not compiled in the strict sense, it will be parsed and fully optimized the first time it is executed. This is a point of competition between current mainstream browsers. Therefore, we need to embed the repeated eval code into the template function provided in advance: a function that is ready and only needs expression calculation:
Copy code
The code is as follows:
/**
* Template: tmplCount
* Function: Count the number of expressions matching $express in the arr array
*/
function tmplCount(arr) {
var count = 0;
for(var i = 0; i var e = arr[i];
if($express) {
🎜>The above is a template function that traverses the parameters arr [] and count the number matching $express. Except for the expressions within if(...), everything else is ready. The character $express can also be replaced by other identifiers, as long as it does not conflict with other characters in the function.
When we need to instantiate, we first convert the function into string format through tmplCount.toString(), then replace $express with the expression we want, and finally eval this string of characters to get a Function type Variables, an instance of a template function is generated!
Let’s give a simple demonstration:
Copy the code
The code is as follows:
function createInstance(exp)
{
// Replace the expression in the template
var code = tmplCount.toString()
.replace ('$express', exp);
// Prevent anonymous functions from directly eval reporting errors
var fn = eval('0,' code);
// Return template instance
// Test parameters
var student = [
{name: 'Jane', age: 14}, {name: 'Jack', age: 20},
{name: 'Adam', age: 18}
];
var f1 = createInstance('e.age alert(f1(student)); //1
// demo2
var f2 = createInstance('e.name!="Jack" && e.age>=14');
alert(f2(student)); //2
Note that among the parameters of createInstance(), there is an object called e, which is defined in the tmplCount template and refers to the specific element during traversal. The returned f1 and f2 are two instances of the tmplCount template. The final called f1 and f2 functions have already embedded our expression statements, just like we have written two functions with the same function in advance, so the expressions are run directly during traversal without callbacks or anything, which is efficient. Significant improvement.
In fact, to put it bluntly, tmplCount exists only to provide the string of this function, and it itself will never be called. In fact, the definition in the form of a string is the same, but writing it in a function is more intuitive and convenient for testing.
It is worth noting that if the script needs compression optimization later, the tmplCount template must not be involved, otherwise the corresponding "e." and "$express" may change.
JSON basic query function
First we implement the query template:
Copy the code
The code is as follows: // for(var _k in _list) { Then start writing the select method of Object: var code = __interpret(exp); //Interpret expression
var __proto = Object.prototype;
// Template: __tmpl
// Parameters: $C
// Description: Record and return the set of elements matching $C in the _list object
//
var __tmpl = function(_list) {
var _ret = [];
var _i = -1;
var _e = _list[_k];
if(_e && _e != __proto[_k]) {
if ($C)
}.toString();
Copy code
__proto.select = function(exp) {
If(!exp)
return [];
var fn = __cache[exp];
try { if(!fn) {
fn = __cache[exp] = __compile(code);
return fn(this); }
}
The __cache table implements the cache of query statements. For repeated queries, performance can be greatly improved.
Copy code
The code is as follows:
function __compile() {
jsonselect.rar
For demonstration purposes, only some basic functions are currently implemented. In the future, you can also add LIKE, BETWEEN, ORDER BY and other commonly used functions.
Demo
The code is as follows:
// name ===================== Power === agile == ===Intelligence====
{name:'Icehouse Witch', DP:38, AP:1.3, Str:16, Agi:16, Int:21},
{name:'Silent Warlock ', DP:39, AP:1.1, Str:17, Agi:16, Int:21},
21, Int:18},
{name:'Bounty Hunter', DP:39, AP:4.0, Str:17, Agi:21, Int:16},
{name:'Venomancer' ', DP:45, AP:3.1, Str:18, Agi:22, Int:15},
{name:'Guardian of Light', DP:38, AP:1.1, Str:16, Agi:15 , Int:22},
;
// Query:
ending in "Scholar" // Result: Silence Warlock, Venomancer, Alchemist var match = heroes.select('right(@name,1)="Shi" ');
// Query:
with more than 500 health // Result: Alchemist

Understanding how JavaScript engine works internally is important to developers because it helps write more efficient code and understand performance bottlenecks and optimization strategies. 1) The engine's workflow includes three stages: parsing, compiling and execution; 2) During the execution process, the engine will perform dynamic optimization, such as inline cache and hidden classes; 3) Best practices include avoiding global variables, optimizing loops, using const and lets, and avoiding excessive use of closures.

Python is more suitable for beginners, with a smooth learning curve and concise syntax; JavaScript is suitable for front-end development, with a steep learning curve and flexible syntax. 1. Python syntax is intuitive and suitable for data science and back-end development. 2. JavaScript is flexible and widely used in front-end and server-side programming.

Python and JavaScript have their own advantages and disadvantages in terms of community, libraries and resources. 1) The Python community is friendly and suitable for beginners, but the front-end development resources are not as rich as JavaScript. 2) Python is powerful in data science and machine learning libraries, while JavaScript is better in front-end development libraries and frameworks. 3) Both have rich learning resources, but Python is suitable for starting with official documents, while JavaScript is better with MDNWebDocs. The choice should be based on project needs and personal interests.

The shift from C/C to JavaScript requires adapting to dynamic typing, garbage collection and asynchronous programming. 1) C/C is a statically typed language that requires manual memory management, while JavaScript is dynamically typed and garbage collection is automatically processed. 2) C/C needs to be compiled into machine code, while JavaScript is an interpreted language. 3) JavaScript introduces concepts such as closures, prototype chains and Promise, which enhances flexibility and asynchronous programming capabilities.

Different JavaScript engines have different effects when parsing and executing JavaScript code, because the implementation principles and optimization strategies of each engine differ. 1. Lexical analysis: convert source code into lexical unit. 2. Grammar analysis: Generate an abstract syntax tree. 3. Optimization and compilation: Generate machine code through the JIT compiler. 4. Execute: Run the machine code. V8 engine optimizes through instant compilation and hidden class, SpiderMonkey uses a type inference system, resulting in different performance performance on the same code.

JavaScript's applications in the real world include server-side programming, mobile application development and Internet of Things control: 1. Server-side programming is realized through Node.js, suitable for high concurrent request processing. 2. Mobile application development is carried out through ReactNative and supports cross-platform deployment. 3. Used for IoT device control through Johnny-Five library, suitable for hardware interaction.

I built a functional multi-tenant SaaS application (an EdTech app) with your everyday tech tool and you can do the same. First, what’s a multi-tenant SaaS application? Multi-tenant SaaS applications let you serve multiple customers from a sing

This article demonstrates frontend integration with a backend secured by Permit, building a functional EdTech SaaS application using Next.js. The frontend fetches user permissions to control UI visibility and ensures API requests adhere to role-base


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

MinGW - Minimalist GNU for Windows
This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

EditPlus Chinese cracked version
Small size, syntax highlighting, does not support code prompt function

SublimeText3 Chinese version
Chinese version, very easy to use

SublimeText3 Linux new version
SublimeText3 Linux latest version

Zend Studio 13.0.1
Powerful PHP integrated development environment