我试图探索 JavaScript与普通按键访问Object相比如何执行。我在JSBEN.CH上运行了以下 3 段代码。MapSet
对象
const object = {};
for (let i = 0; i < 10000; ++i) {
object[`key_${i}`] = 1;
}
let result = 0;
for (let i = 0; i < 10000; ++i) {
result += object[`key_${i}`];
}
Run Code Online (Sandbox Code Playgroud)
地图
const map = new Map();
for (let i = 0; i < 10000; ++i) {
map.set(`key_${i}`, 1);
}
let result = 0;
for (let i = 0; i < 10000; ++i) { …Run Code Online (Sandbox Code Playgroud) 我在后端有一个 API,它201在成功调用的情况下发送状态,如果提交的数据有任何错误,它会发送状态422(不可处理的实体),并带有如下 json 响应:
{
"error": "Some error text here explaining the error"
}
Run Code Online (Sandbox Code Playgroud)
此外,它会404在 API 由于某种原因无法在后端工作时发送。
在前端,我使用以下代码获取响应并根据响应状态代码执行成功或错误回调:
{
"error": "Some error text here explaining the error"
}
Run Code Online (Sandbox Code Playgroud)
该successCallback函数能够在状态代码的情况下以正确的 JSON 格式接收响应,201但是当我尝试在errorCallback( status: 422) 中获取错误响应时,它显示如下内容(在控制台中记录响应):
Error: [object Response]
at status (grocery-market.js:447)
Run Code Online (Sandbox Code Playgroud)
当我console.log在new Error()像这样包装之前尝试错误响应时,
checkStatus = (response) => {
if (response.status >= 200 && response.status < 300) {
return Promise.resolve(response)
} else {
console.log(response.json()) //logging …Run Code Online (Sandbox Code Playgroud) 我正在浏览这个 webpack 教程:https ://youtu.be/TOb1c39m64A
__dirname在 1:30:00 左右,他讨论了in的用法path.resolve,但我不太明白使用和不使用它有什么区别。
这两个(path.resolve& __dirname)不是同一个意思吗?两者都给出了该文件运行的当前绝对目录。事实证明,当我删除它时__dirname,它仍然会build在同一根位置创建文件(即使webpack.config.js)文件不存在于根级别。即下面的代码产生相同的结果:
和__dirname
output: {
assetModuleFilename: "images/[hash][ext][query]",
path: path.resolve(__dirname, 'dist')
},
Run Code Online (Sandbox Code Playgroud)
没有__dirname:
output: {
assetModuleFilename: "images/[hash][ext][query]",
path: path.resolve('dist')
},
Run Code Online (Sandbox Code Playgroud)
__dirname那么这里需要用到什么呢??
我正在为我的项目开发搜索功能。用户在搜索栏上键入任何内容后;搜索文本发生任何更改时,我都会将文本发送到后端进行验证并收到响应(文本错误或无错误):
this.searchBar.on('change', () => {
http.post('api_link', {searchText:
this.serachBar.searchText}).subscribe(resp => {
this.resp = resp['Result'];
});
})
Run Code Online (Sandbox Code Playgroud)
现在,当用户不断在搜索栏中键入内容时,后端会收到多个验证响应。但是,在进行任何新更改时,只有最新的订阅才有效,并且以前对api的任何调用都是无用的。
有什么办法可以使用订阅取消对api的任何新调用上的先前订阅?
注意:似乎可以等待所有响应,但是我还将在搜索栏下方显示响应(直到那时显示一个加载程序)。因此,我希望加载程序一直加载直到最新的响应可用,而不是在各种响应状态之间转换。
我正在尝试在d3.js中构建动态加载的条形图,该条形图将从后端部分加载数据。使用此d3.csv()功能,是否有任何方法可以n从数据中读取第一个行数以进行初始绘制,然后按照我的JS逻辑加载后续数据?
tl; dr我想有选择地访问d3.csv()函数中的数据。
我正在尝试运行以下代码:
var margin = {
top: 20,
bottom: 30,
left: 40,
right: 30
},
width = 600 - margin.left - margin.right,
height = 500 - margin.top - margin.bottom;
var loadData = function() {
d3.csv("test_data.csv", function(data) {
console.log(data.filter(function(d, i) {
return i < 2;
}));
console.log(data.filter(function(d, i) {
return i < 3;
}))
})
}
loadData();
Run Code Online (Sandbox Code Playgroud)
但是,控制台出现错误:
未捕获(承诺)TypeError:data.filter不是函数(…)
这使我相信此数据不是数组。是这种情况还是我在这里面临其他问题?
另外,如何访问此d3.csv函数内的列(在csv文件中)?(例如,如果我的csv数据文件包含名为a和b的两列)。
我正在尝试构建d3折线图,该图将在每次单击时更新图表数据。到目前为止,这是我的进度:
var n = 10,
random = d3.randomNormal(0, .2),
data = d3.range(n).map(random);
var svg = d3.select("svg"),
margin = {
top: 20,
right: 20,
bottom: 20,
left: 40
},
width = +svg.attr("width") - margin.left - margin.right,
height = +svg.attr("height") - margin.top - margin.bottom,
g = svg.append("g").attr("transform", "translate(" + margin.left + "," + margin.top + ")");
var x = d3.scaleLinear()
.domain([0, n - 1])
.range([0, width]);
var y = d3.scaleLinear()
.domain([-1, 1])
.range([height, 0]);
var line = d3.line()
.x(function(d, i) {
return …Run Code Online (Sandbox Code Playgroud)所以我已经使用 npm -bootstrap@3 安装了引导程序,但是当我尝试在我的应用程序中包含来自 node_modules 的 bootstrap.min.css 文件时,它在我的控制台中显示此错误:
错误信息
在网络选项卡中显示
在引导源中找不到 404。
以下是我的项目结构中的一些图像:
项目文件夹结构
包含引导程序文件的 ejs 代码
这里有什么问题?
有人可以解释一下这段 JavaScript 代码中发生了什么:
let arr = [];
arr["foo"] = "11";
arr["sd"] = "12";
arr[1] = "13";
console.log(arr.length); //2
console.log(arr) // [empty, "13", foo: "11", sd: "12"]Run Code Online (Sandbox Code Playgroud)
为什么empty数组中有一个元素?
另外,为什么数组length等于 2 而不是 4?
我正在尝试通过使用 Go 中的 gorilla mux 库构建不同的基本 REST API 来学习后端开发(遵循本教程)
这是我迄今为止构建的代码:
package main
import (
"encoding/json"
"net/http"
"github.com/gorilla/mux"
)
// Post represents single post by user
type Post struct {
Title string `json:"title"`
Body string `json:"body"`
Author User `json:"author"`
}
// User is struct that represnets a user
type User struct {
FullName string `json:"fullName"`
Username string `json:"username"`
Email string `json:"email"`
}
var posts []Post = []Post{}
func main() {
router := mux.NewRouter()
router.HandleFunc("/posts", addItem).Methods("POST")
http.ListenAndServe(":5000", router)
}
func …Run Code Online (Sandbox Code Playgroud) 正如我们所知,当 props 或 state 发生变化时,react 组件会重新渲染。
我现在正在使用useQuery从react-apollo包象下面这样:
import { gql, useQuery } from '@apollo/client';
const getBookQuery = gql`
{
books {
name
}
}
`;
function BookList() {
const { loading, error, data} = useQuery(getBookQuery);
if(loading) return <p>Loading....</p>
if(error) return <p>Ops! Something went wrong</p>
return (
<>
<ul>
{data.books.map(book => (
<li key={book.name}>{book.name}</li>
))}
</ul>
</>
)
}
export default BookList;
Run Code Online (Sandbox Code Playgroud)
当我运行上面的代码时,我们首先进入Loading...DOM,然后将其更新为包含查询数据的列表(一旦它到达)。但是一旦从查询中收到数据,react 如何知道重新渲染我的组件。
这些data,loading和error属性是否映射到组件 props 并且它们正在更新?如果是这样,为什么 chrome 开发工具不显示此 …
javascript ×7
reactjs ×3
css ×2
d3.js ×2
node.js ×2
object ×2
angular ×1
apollo ×1
arrays ×1
backend ×1
csv ×1
database ×1
dictionary ×1
ejs ×1
encode ×1
fetch ×1
go ×1
http ×1
httprequest ×1
jquery ×1
json ×1
observable ×1
path ×1
performance ×1
react-apollo ×1
react-hooks ×1
rest ×1
rxjs ×1
set ×1
subscribe ×1
webpack ×1